{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "dpath = './data/'\n",
    "dtrain = pd.read_csv(dpath +\"RentListingInquries_FE_train.csv\")\n",
    "dtest  = pd.read_csv(dpath +\"RentListingInquries_FE_test.csv\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 查看数据情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 105,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dtrain.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.countplot(dtrain.interest_level);\n",
    "pyplot.xlabel('interest_level  ');\n",
    "pyplot.ylabel('Number of occurrences');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "样本分布并不均匀,使用StratifiedKFold"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_train = dtrain['interest_level']\n",
    "train = dtrain.drop(['interest_level'], axis=1)\n",
    "X_train = np.array(train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 初步确定弱学习器数量："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "metadata": {},
   "outputs": [],
   "source": [
    "def modelfit_1(alg, X_train, y_train, cv_folds=None, early_stopping_rounds=10):\n",
    "    xgb_param = alg.get_xgb_params()\n",
    "    xgb_param['num_class'] = 3\n",
    "    \n",
    "    #直接调用xgboost，而非sklarn的wrapper类\n",
    "    xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "    cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "             metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "  \n",
    "    cvresult.to_csv('1_nestimators.csv', index_label = 'n_estimators')\n",
    "    \n",
    "    #最佳参数n_estimators\n",
    "    n_estimators = cvresult.shape[0]\n",
    "    \n",
    "    # 采用交叉验证得到的最佳参数n_estimators，训练模型\n",
    "    alg.set_params(n_estimators = n_estimators)\n",
    "    alg.fit(X_train, y_train, eval_metric='mlogloss')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 111,
   "metadata": {},
   "outputs": [],
   "source": [
    "#params = {\"objective\": \"multi:softprob\", \"eval_metric\":\"mlogloss\", \"num_class\": 9}\n",
    "xgb1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=1000,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=6,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=1,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=6)\n",
    "\n",
    "modelfit_1(xgb1, X_train, y_train, cv_folds = kfold)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\ipykernel_launcher.py:1: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEXCAYAAABCjVgAAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xl8XGXd///XJ3uzdkkKXWmBspS9lk1EqqgsKpuAVEFBBVERFb294as/5OYWBUTc4MabWwEFBRFcEFFENhcW2yIgUFvS0iXd0zZr02zz+f1xnaTTMEknaSYzk3k/H49D5yxzzufMCfOZ67rOuS5zd0RERADy0h2AiIhkDiUFERHppaQgIiK9lBRERKSXkoKIiPRSUhARkV5KCiJxzOz/mdmP0h2HSLooKWQZMys3sxVm9qG4ZRVmtsrMzo5bNtfMHjazrWbWYGavmdl1ZjYuWn+hmXWbWUs0LTezT6U49nlmVpfKYwxGonjc/Rvu/okUHW+Fmb0rFftOhZG6Xtn2uYx2SgpZxt1bgEuA75lZTbT4RmChuz8AYGZvBZ4C/g4c4O5jgZOBLuCwuN096+7l7l4OnA3caGZHjMyZyGCYWUG6Y5Ac4e6asnAC7gLuBeYBm4FJcev+BvxgF++/EPhbn2X/AD4UN38a8CrQQEgyB8atOzBa1hBtc1rculOB14BmYA3wJaAMaANiQEs0Te7nvG4Ffh+9/3lgnyQ+jwOAx4AtwBLg3KHEA1wD3BO9bwbgwEXAamArcClwJPBydO63xB1nH+CJ6HrUAz8Dxkbr7o6O1RYd68tJfMYrgP+MjtUOFETza6JzWQKcmOCzOAZYD+THLTsTeDl6fRSwEGgCNgA39/OZzgPq+llXBfwU2ASsBL4K5EXr8oFvR5/BG8Bl0edY0M++VgDv6mfdxUBtdF0f6vmbAQz4DrARaIw+o4P7u97p/v81m6a0B6BpiBcOxgHrov/xLopbXgZ0A/N28f4LiUsK0RddA7BfNL8f0Aq8GygEvhz9z1kUzdcC/y+af2f0P+D+0XvXAcfHxTknet3vl0xcHHdFXwBHRV+CPwPu28V7yghf2hdF75kTfS4HDTYeEieFHwIlwHuA7cBvgInAlOhL6YRo+32jz6sYqAH+Anw3bt87ffkN9BnHbf8iMA0YA+wfnefkuPgSJkxgGfDuuPlfAldGr58FLohelwPH9LOPfq8XISH8FqiI4lgKfDxadynhS3lq9Hn/mSEkhejvqj66nsXAD4C/ROtOAhYBYwkJ4kCiH0b9XW9NyU2qPspS7r6V8AuzFPhV3KpxhGrB9T0LzOzGqF2h1cy+GrftMdHyFkIp4W7g9WjdB4Hfu/tj7t4J3ET4Ynor4ZdoOXC9u3e4+xPAw8D86L2dwGwzq3T3re7+wiBP71fu/g937yIkhcN3sf37gBXufqe7d0XHe5BQJTYc8fy3u2939z8RvsTvdfeN7r4G+CtwBIC710afV7u7bwJuBk4YYL8DfcY9vu/uq929jZDsi6NzKXT3Fe6+rJ9930t0PcysgvDr+d64z2NfM6t29xZ3f24wH4aZ5UexX+Xuze6+glAyuCDa5Fzge+5eF/2dXj+Y/cf5MHCHu7/g7u3AVcCxZjYjOocKQgnR3H2xu6+LO7/dud45TUkhS5nZ+YRfaH8GbohbtZVQTTGpZ4G7f9lDu8KvCb+kezzn7mM9tCnsCRwEfCNaN5lQLdCzjxjhV+qUaN3qaFmPldE6gA8QvoRWmtnTZnbsIE9vfdzrbYQENJC9gKOjBNdgZg2EL5Q9hymeDXGv2xLMlwOY2UQzu8/M1phZE3APUD3Afgf6jHusjltfC3yeUJrZGB1rcj/7/jlwlpkVA2cBL7h7z7E+Tiil/NvMFpjZ+waIMZFqQglxZdyy+Os/OT7uPq8Ho+/n00KompsS/RC5hVDVuMHMbjezymjT3b3eOU1JIQuZ2URCferFwCeBc83s7QDu3kqohz9rMPt09w2EX9fvjxatJXzZ9hzTCNUYa6J108ws/u9nerQOd1/g7qcTqlh+A9zfc5jBxDQIq4GnowTXM5W7+6dGOJ5vRvs81N0rgfMJVRs9+h5voM844Xvc/efu/rbofc7OPwjit3uN8IV6CvAhQpLoWfe6u88nfB43AA+YWVnyp0k94df4XnHLeq8/ofpmaty6aYPYd7y+n08ZMIEdf2ffd/e3EH7M7Af8R7S8v+stSVBSyE63AL9x9yejIvOXgf+LfhUSzX/MzK6MEghmNhWY2d8OzWwCoTHy1WjR/cB7zexEMysEvkho7HyGkHRagS+bWaGZzSMkk/vMrMjMPmxmVVGVSBOh2gPCL+wJZlY1TJ9Dj4eB/czsgiieQjM70swOHOF4KgiNyA1mNoXoSyrOBmDvuPmBPuM3MbP9zeyd0XXeTiildCfaNvJz4HLg7YQ2hZ79nG9mNVHJpCFa3O9+zKwkfiKURO8Hrotuh94LuIJQMuo5r8+Z2RQzG0toHN+Vwj7HKYjiv8jMDo/O+RvA8+6+Irq+R0efW2v0eXTv4npLMtLdqKFpcBNwBuEX1Ng+yx8HroubPxp4hPA/fQPwCnAdMCFafyHhf5aeO282EuqcJ8bt40xCg2Ej8DRRw2207qBoWWO0zZnR8iLgj4RqrCZgAfC2uPfdQagCaKD/u4++Hjc/j100Tkfb7U+4Y2lTtP8nCG0Rg4qHxA3NBXHb1xHXiE/4Ivxq3GeyKPo8XyR8ydfFbXs6sCo61peS+IxXsHPD9KGEtp9mQmP8w4k+w7jtpxO+wH/fZ/k90fVuIfwIOKOf98+Lzr/vtC+h7eqe6PNeDVzNjruPCggl2c2Eu4++QChZWD/HWZHgGF+P1l1KaDTvOd+p0fITCXcctbDjTq/yXV1vTbueLPqARURSwsxOAX7o7nvtcmNJO1UficiwMrMxZnaqmRVE1WhfI9zkIFlAJQXJCmZ2PPCHROs83D0lGcLMSglVYQcQ2j1+D3zO3ZvSGpgkRUlBRER6qfpIRER6ZV0nW9XV1T5jxox0hyEiklUWLVpU7+41u9ou65LCjBkzWLhwYbrDEBHJKma2ctdbqfpIRETiKCmIiEgvJQUREemlpCAiIr2UFEREpJeSgoiI9FJSEBGRXjmTFBava+JnzyxD3XqIiPQvZ5JC05+/xYf/NIfWba3pDkVEJGPlTFLIL6kAoKVhS5ojERHJXDmTFApKxwLQ2qykICLSn5xJCoVl4wDY3qSkICLSn5xJCsXloaTQ3rI1zZGIiGSunEkKYyomANC5rSHNkYiIZK6cSQqlVeMB6GpVSUFEpD85kxTKo6Tg2xvTHImISObKmaRQWFJBl+fBdo0dLiLSn5xJCpjRaqVYu0oKIiL9SVlSMLM7zGyjmb3Sz3ozs++bWa2ZvWxmc1IVS4/WvHIKOppTfRgRkayVypLCXcDJA6w/BZgVTZcAt6UwFgC255VR2KWkICLSn5QlBXf/CzDQk2KnAz/14DlgrJlNSlU8AO0FFRQrKYiI9CudbQpTgNVx83XRsjcxs0vMbKGZLdy0adOQD9hRUMGY7pYhv19EZLRLZ1KwBMsS9mvt7re7+1x3n1tTUzPkA3YXVTDG1UuqiEh/0pkU6oBpcfNTgbWpPGCsuJJy36YxFURE+pHOpPAQ8JHoLqRjgEZ3X5fKA75cDxXWRktbeyoPIyKStQpStWMzuxeYB1SbWR3wNaAQwN1/CDwCnArUAtuAi1IVS48jClZAJzQ1bKaiNGHzhYhITktZUnD3+btY78BnUnX8RAoOORP+8RwtW+thspKCiEhfufNEM1BcUQ3Atqah38EkIjKa5VRSGFMZksL25s1pjkREJDPlVFIoGzsRgK7m+jRHIiKSmXIqKVSMD884dLdqSE4RkURyKikUloZxmmnTQDsiIonkVFIgv4BmSsnbrqQgIpJIbiUFoCWvkoIOjakgIpJIziWFtvxKijuVFEREEsm5pNBeWMWYLg3JKSKSSM4lhc6iKspiSgoiIonkXFKIlYyj0lvojqmnVBGRvnIuKbxUb1TRSuM29ZQqItJXziWFOYVvkGdOw5aN6Q5FRCTj5FxSKDriPACat2xIcyQiIpkn55LCmKj/o21bVVIQEekr55JC+fg9AWhvUlIQEekr55JCRZQUupqVFERE+sq5pFBYEaqPaFX32SIifeVcUqCwhG2UkNem7rNFRPrKvaQANOePpbBdo6+JiPSVk0mhraCKko6GdIchIpJxcjIptBeNp7xbPaWKiPSVk0mha8x4Kr1R/R+JiPSR0qRgZieb2RIzqzWzKxOs38vMHjezl83sKTObmsp4eviYaibQxNZW9X8kIhIvZUnBzPKBW4FTgNnAfDOb3Wezm4CfuvuhwLXAN1MVT7yCihpKrJP6rRqWU0QkXipLCkcBte6+3N07gPuA0/tsMxt4PHr9ZIL1KVG88ikAGuvXjsThRESyRiqTwhRgddx8XbQs3kvAB6LXZwIVZjah747M7BIzW2hmCzdt2rTbgZW94wsAtNav2e19iYiMJqlMCpZgWd+W3S8BJ5jZP4ETgDVA15ve5H67u89197k1NTW7HVjVxGkAtDes3+19iYiMJgUp3HcdMC1ufiqwU32Nu68FzgIws3LgA+6e8ntFi8dOAiDWtC7VhxIRySqpLCksAGaZ2UwzKwLOAx6K38DMqs2sJ4argDtSGM8OpRPoJg9rVad4IiLxUpYU3L0LuAx4FFgM3O/ur5rZtWZ2WrTZPGCJmS0F9gCuS1U8O8nLpylvLIXb1SmeiEi8VFYf4e6PAI/0WXZ13OsHgAdSGUN/WgonUNa++43WIiKjSU4+0QzQXlJNZfdW3PVUs4hIj5xNCt2lE5lAA03b33Szk4hIzsrZpGAVe1BNIxsbt6U7FBGRjJGzSaF47T8otG42bdRtqSIiPXI2KZS9/TMANG9cleZIREQyR84mhaqJewHQtrkuzZGIiGSOnE0KheNCL93djeoUT0SkR84mBcr3oJs88lqUFEREeuRuUsgvoDl/HCVtG9IdiYhIxsjdpAC0Fk+kskNPNYuI9MjppNBRuifVvpnm7Z3pDkVEJCPkdFKgchKTbAtrG7anOxIRkYyQ00mhaNxUKm0bazaqt1QREcjxpFCxPHTg2rD+jTRHIiKSGXI7KZx+IwBtm1akNxARkQyR00nBxk4HILZVXV2IiECOJwUqJtFFPoUt6upCRARyPSnkF9BcNJGKtnUabEdEhFxPCkBb6RQm+kYa2/SsgohIzicFr5rGVKtn5WYNtiMikvNJoaRmBnuwlZWbtqY7FBGRtMv5pFC57BHyzNm8Znm6QxERSbucTwqFp38HgLaNy9IciYhI+qU0KZjZyWa2xMxqzezKBOunm9mTZvZPM3vZzE5NZTwJjd87xLJFJQURkZQlBTPLB24FTgFmA/PNbHafzb4K3O/uRwDnAf+Tqnj6VbEnHVZMaetq3ZYqIjkvlSWFo4Bad1/u7h3AfcDpfbZxoDJ6XQWM/DBoZrSWTWNy9zo2t3aM+OFFRDJJKpPCFGB13HxdtCzeNcD5ZlYHPAJ8NoXx9Kt77Ez2svXUbmxJx+FFRDJGKpOCJVjWt35mPnCXu08FTgXuNrM3xWRml5jZQjNbuGnT8I+UVjJxH/ayjby+vnHY9y0ikk12mRTMbB8zK45ezzOzy81sbBL7rgOmxc1P5c3VQx8H7gdw92eBEqC6747c/XZ3n+vuc2tqapI49OCUTdqPYutkfZ260BaR3JZMSeFBoNvM9gV+DMwEfp7E+xYAs8xsppkVERqSH+qzzSrgRAAzO5CQFEZ80GSbsC8A7ev/PdKHFhHJKMkkhZi7dwFnAt919y8Ak3b1pug9lwGPAosJdxm9ambXmtlp0WZfBC42s5eAe4ELPR23ANXsD0Dh1toRP7SISCYpSGKbTjObD3wUeH+0rDCZnbv7I4QG5PhlV8e9fg04LrlQU6h8D9oLypm8fRX1Le1UlxenOyIRkbRIpqRwEXAscJ27v2FmM4F7UhvWCDOjfews9rW1LF7XlO5oRETSZpdJwd1fc/fL3f1eMxsHVLj79SMQ24gqnnQA++at4V9rdAeSiOSuZO4+esrMKs1sPPAScKeZ3Zz60EZW8Z4HUmONLFulUdhEJHclU31U5e5NwFnAne7+FuBdqQ0rDV68D4C2Na+kORARkfRJJikUmNkk4Fzg4RTHkz4XPAhAdctStqq7CxHJUckkhWsJt5Uuc/cFZrY38Hpqw0qDikk0WCWzbSWvrFW7gojkpmQamn/p7oe6+6ei+eXu/oHUhzbCzCibfgSz81aqsVlEclYyDc1TzezXZrbRzDaY2YNmNnUkghtphVMOY/+8Ol6r25zuUERE0iKZ6qM7Cd1TTCb0cvq7aNnos/SPFNNJ0+rX0h2JiEhaJJMUatz9Tnfviqa7gOHvlS4TFJYDMKF5iRqbRSQnJZMU6s3sfDPLj6bzgdFZv/KJx2iniNl5K3lxdUO6oxERGXHJJIWPEW5HXQ+sA84mdH0x+uQXUDjpYA7OW8mzy0dn3hMRGUgydx+tcvfT3L3G3Se6+xmEB9lGpbzJh3JI/kqera1PdygiIiNuqCOvXTGsUWSSPQ+h3FvYum4Zjds60x2NiMiIGmpSSDTU5uiw6KcAHGrLeP4NVSGJSG4ZalIY+YFwRsrFj+OFpRxbsFTtCiKSc/odZMfMmkn85W/AmJRFlG75hdjUuRxfV8vPlikpiEhu6bek4O4V7l6ZYKpw92RGbMte049leudy6tZvYHNLe7qjEREZMUOtPhrdFv+ePGLMyXudc//32XRHIyIyYpQUEvn4o7jlM6+klv32qEh3NCIiI0ZJIZHicmzSobxjzDKeWrKJto7udEckIjIilBT6M/1Ypm9fTHfndk675W/pjkZEZEQk03V2s5k19ZlWR91p7z0SQabF9GPJ727nrfmLOWRqVbqjEREZEcncRXQzsBb4OeF21POAPYElwB3AvFQFl1YzjwfL48OT1vLF1zbQ2R2jMF8FKxEZ3ZL5ljvZ3f/X3ZvdvcndbwdOdfdfAOMGeqOZnWxmS8ys1syuTLD+O2b2YjQtNbPM6Zp0zDiYdjRHdy2iaXsXf1NfSCKSA5JJCjEzO9fM8qLp3Lh1/T7ZbGb5wK3AKcBsYL6ZzY7fxt2/4O6Hu/vhwA+AXw3+FFJo1rupbHiVWWNauH/B6nRHIyKScskkhQ8DFwAbo+kC4HwzGwNcNsD7jgJqozGdO4D7gNMH2H4+cG9SUY+UWScB8LmCX/HYaxvY1KwH2URkdEum6+zl7v5+d6+Opve7e627t7n7QLflTAHif17XRcvexMz2AmYCT/Sz/hIzW2hmCzdt2rSrkIfPHgdB5RTmTcujK+Y8sKhu5I4tIpIGydx9NDW602ijmW0wswfNbGoS+07Uk2p/1U3nAQ+4e8IHAtz9dnef6+5za2pGcCRQM5j1bsrr/sqxMyr5xYJVxGKjty9AEZFkqo/uBB4CJhN+6f8uWrYrdcC0uPmphLuYEjmPTKs66jHrPdDRzGeab2HF5m38fZkanEVk9EomKdS4+53u3hVNdwHJ/FxfAMwys5lmVkT44n+o70Zmtj/hLqbM7GRo73dAUTnHzKphj8pibnmiNt0RiYikTDJJod7Mzjez/Gg6H9hln9Lu3kVoiH4UWAzc7+6vmtm1ZnZa3KbzgfvcPTPrZYpK4cD3U/Dvh/j08dN4/o0tPKdxFkRklLJdfReb2XTgFuBYQpvAM8Dl7r4q9eG92dy5c33hwoUje9Dax+Ges+iYcBDHNV3LrInl/PziY0Y2BhGR3WBmi9x97q62S+buo1Xufpq717j7RHc/AzhrWKLMFjNPgLKJFE3ch0++fW+eWbZZpQURGZWG2m/DFcMaRabLL4CDz4Klj/Lhw8YxuaqEax56la7uWLojExEZVkNNColuNx3dDj0XutsZc9eJXP3+2fx7fTMnfvvpdEclIjKshpoUMrNROJUmz4FJh0N+ISfN3oMT9qthc2sHG5u2pzsyEZFh029S6KfL7CYzayY8s5BbzODoS2HTv7EfHs9/nXYQrR1dvPs7T+uBNhEZNfpNCu5e4e6VCaYKd0+my+3R5+CzIK8Qmtcyo7qM6844hMa2Lm57elm6IxMRGRYaIGAwCorh+CugbStsXsb8o6bxvkMncfNjS3l2me5GEpHsp6QwWHM/Fv698xTMjG+edQgzJpTyybsX8vqG5vTGJiKym5QUBqtiTzj6k9BaD5uXUVFSyF0XHUVbZzfv/f7fWN+ohmcRyV5KCkPxtisAhzvCeAvTxpfy608fR1csxgnfepI1DW3pjU9EZIiUFIaiYg849rJQWtj4bwAOnlLFLy99K10x5x03PcWK+tY0BykiMnhKCkN13OfB8kJpIeo/6i17jeO3nzmOWMx5181Ps3DFljQHKSIyOEoKQ1U2AU65AbY3wK1H9y4+eEoVf77iBAryjXN++Cz3L1hNpnYAKyLSl5LC7pj7MSgqh63LYXtj7+IZ1WU8d9WJvHXfCXz5wZc58ro/09relcZARUSSo6SwO/Ly4aO/g+5O+MHOPdKOLS3ipx87ms+dOIv6lg6OuPYx/vCvdSo1iEhGU1LYXVPmwPFfhNaNcMtRO63KzzO+8O79eODSYynINz71sxc49L/+xIurG9IUrIjIwJQUhsO8q6CoAjbXQsObxx6aO2M8L3/tPVx7+kG0dXRzxq1/Z861f2L5ppY0BCsi0j8lheGQXwiX/jW8/p9joGPbmzYpyM/jI8fO4MWvvYfPnTiLhrZO3vntp5n79cd4uU4lBxHJDLscjjPTpGU4zmQtfRR+fi6UVsN/1IaeVftR39LOrU/W8pNnVhBzKCvO52vvO4iTD9mTypLCEQxaRHJBssNxKikMt799F/78NRi7F3z+5V1u3rS9k18tquP6P/6b7Z1hJLdxpYVcd+YhvPOAiZQU5qc6YhHJAUoK6eIOv/4kvPwLqD4ALns+ybc5L9U1cundC9nQ1N47ilFlSQGfmrcvb9u3mtmTK8nPy71B70Rk9ykppFPndrhpX2hvgY8+BDPfPqi3d8ec55Zv5ov3v8jG5nbix/AZX1rIF0/an7ftW8308aXYAFVUIiI9lBTSbdsW+M5B0NUOH38Mpr5lyLva2LydZ5dt5usPv0Z9S0dvKcKAqtJCPnrsDA6aXMlBU6qYXFWiRCEib5IRScHMTga+B+QDP3L36xNscy5wDWHc55fc/UMD7TNrkgJA0zr4/mHQ3RVKDDPettu7dHfeqG/l77X1fPfPr7N1W8dOJQkDKkoK+OCR09i7ppyZ1WXMrC5jYkWxkoVIDkt7UjCzfGAp8G6gDlgAzHf31+K2mQXcD7zT3bea2UR33zjQfrMqKQA0rYUfzAklhg/eAwe8d9gPsa2ji3+vb+bVtU18//HX2dyyc5VTjzGF+RwXVTtNHz+GaeNLmVQ1hklVJYwtLVTSEBnFMiEpHAtc4+4nRfNXAbj7N+O2uRFY6u4/Sna/WZcUAFo3w/cOhY6WcFfS514a8HbV4RCLOWsb21hRv4036ltYXt/Kr/+5hqa2zoQJA0JIeYQuOs6ZO41JVSXsWVXCnpUl1FQUM76sSHdDiWSpTEgKZwMnu/snovkLgKPd/bK4bX5DKE0cR6hiusbd/5hgX5cAlwBMnz79LStXrkxJzCnV2QbfOQS2bYLSGvjCv6BwTFpCcXc2t3awess21jduZ13jdtY3befBRXU0bOsgRm9v4AmZRe0ZYwo5+eBJVJcXMaGsiAnlxUwoL2LsmCIqSgooLy6gvKSAwnw9IymSbpmQFM4BTuqTFI5y98/GbfMw0AmcC0wF/goc7O79PuKblSWFHu7wt+/A4/8Velf9zD+gakq6o0ooFguJIySNNja3drC5pZ36lg5+99JaGto6cXfcIZm/IIv+Y4CZYcDY0kLed+hkKktC8qgoKaS8uICKkoIoqRSGf0sKKC8qIE+344oMWbJJoSCFMdQB0+LmpwJrE2zznLt3Am+Y2RJgFqH9YfQxg+OvgIkHwn0fDlVKH/gxHHRGuiN7k7w8o6aimJqKYg6ZWrXTumtOO2in+e6Y07Ctg82tHdQ3t9PY1klzexct27v48d/eYGNzGLe6J4G4Ow5sbungrmdWDCqunrTQU/tm0Ux/y/eoKOYTx+9NSWEeJYX5jCnMp6Qwn6KCvDDlh38L8+Pme5cZBSrlSI5JZUmhgFA1dCKwhvBF/yF3fzVum5MJjc8fNbNq4J/A4e6+ub/9ZnVJIV59Ldx+QmhnOGx+GLCnpGrX7xuFYjGntaOLlvYumrf3TJ20RInlf56qZX3j9t4SSc+f7I553zGfZMllqCzBTN/yS09CSvienVftvH4Q75k+vpSvvHc2hXkhceXnWUhieXkU5BsFeUZhtDw/z0J7kVk0hdJanoWefPMs8XoZXdJefRQFcSrwXUJ7wR3ufp2ZXQssdPeHLPzlfRs4GegGrnP3+wba56hJChDGYfjLt+DpGyC/CM75CRxwarqjGjW6Y057VzdtHd1s74qFfzvD1NEVo707RmdXjI7uGJ3dMTq6Ytz21DLWxSUg4hNOHE+wcLDvya4nhBLrN3X0l/iGoLQoVGi0dexioKoUJLKRSo1jS0N/Zw3bOvs9sAH71pTzh88P7mHY3vdnQlJIhVGVFHrULYKfvA86t8GY8fCxR6Fmv3RHJSMsFnO6Yk5XLEZnt9Mdc7q6Y3TGnO5upzMWo6vb+eL9L7K8vhWAvcaX4sDKzWF+p/+bkyw1JdwmwfdCst8UiRJm0sdNoKwo3PHW2tGdYCcD7yVd326DPW5Rfh4OdHbFBtxuZnUZT3xp3pBiUlLINt2d8Mz34YnrwLvhLReFcRoq9kh3ZCIyCiSbFNSKlinyC8MIbl9cAkdeDIvugpsPgCe/Ae3N6Y5ORHKEkkKmKa+B994En10UqpKevgFumAnP/2941kFEJIWUFDLVhH3gy8vgE0+Eh9z+8GX45jT4y03QppHaRCQ1lBQy3dS3wJWr4MLfQ1EZPPHfcOPe8NjXoGXAbqJERAZNSSEbmIUeVq9cCZc8DWPGwd+/CzftBw9fAVtXpDtCERkllBTKjq59AAAQM0lEQVSyzeTDQ7XSZ1+A8omw8MfwvcNCu8OyJyA28C1tIiIDUVLIVhP2gS8thSsWQ+VUaNsKd58J35gET10fnpgWERkkPacwWnS1w21vgy3LwnMOEDrdm3cVHHwWVE5Ob3wiklZ6eC2XNa6Bu06FhlXgUXVScRW8579h9mmhTUJEcoqSggT1taFaqakuShAG+58Ch5wN+50CRaXpjlBERkAmdJ0tmaB63zCgjzusezF02b3kD7DkEbC88IBc6QS4+HEorkh3tCKSZkoKucIMJh8BV7wGsW5Y+Qy88iD88x7YVg/fnAqWH4YL/chvYNxe6Y5YRNJA1Ue5LtYNdQtg8e9gwY+hK+pKw/KgYjKc/WOYMhfy9ftBJJupTUGGZvMyWPrH0OfS9sYdy/MKoGoafPBumHgQ5OluZpFsoqQgu6+tAZY/CX+4Elo37riTCYO8qKpp/n1QPSslA5yIyPBRUpDh17gGfnoGbH0DYl3sGErEQkli3F5w/q/UHiGSgXT3kQy/qinw2QXhtXtIDvecAw0rQpLYXAvfOxQwKJsIJ30dZhwPlZPSGbWIDIJKCjI83GHTErh3PjSuikoSEcuDshp4x1dgyhyoOVAN1yIjTNVHkl6xblj/L7j/o+HBuVifQdctH8r3CE9ZT5kD42aqXUIkhZQUJLO4w5blsOYFeOxqaNmwo48mACyUKConw6k3hURRPjFt4YqMNkoKkvm6O2HjYvjlRdCwMiQJj+/6O7rLqWIynHojTDoMKiapRCEyBEoKkp06WmHdy/CbT0Hj6pAk+iYKywvJ4aSvh0ShqieRXcqIpGBmJwPfA/KBH7n79X3WXwh8C1gTLbrF3X800D6VFHJQewtseBV+fWmUKPqWKNjRRvGua2DSoTBhlhqzReKkPSmYWT6wFHg3UAcsAOa7+2tx21wIzHX3y5Ldr5KCAGH8iI2vwQOfiKqeYn3aKAiJoqwa3no5TDwAJs+B0vHpiVckzTLhOYWjgFp3Xx4FdB9wOvDagO8SSUZBcejg7/JFO5Z1d8Hm1+EXH4meneiGbVvgT1+Je2PUTtFTDTV+79C/0/h9oLBkhE9CJPOkMilMAVbHzdcBRyfY7gNm9nZCqeIL7r667wZmdglwCcD06dNTEKqMCvkFMPHAHQ/Y9WitD9VPD30Wmtbs3E6xaTHc9tbw2vJ2nqr3hwt/ByVVI3seImmUyuqjc4CT3P0T0fwFwFHu/tm4bSYALe7ebmaXAue6+zsH2q+qj2RYuIdxrbeuCG0VW9/YkSz6tlf0lCosL/T3dOYPQ/IpLk9H5CJDkgnVR3XAtLj5qcDa+A3cfXPc7P8BN6QwHpEdzEL7Qul4uOwfO6/r7gzJ4hcXhGcrehJFrBO21MKP39Wzk1AVZXmhB9n33RyqoSqnqBdZyVqpTAoLgFlmNpNwd9F5wIfiNzCzSe6+Lpo9DVicwnhEkpNfGHp+/cxzOy+PxUIXHj8/L0oW0V1QsS7Ysgx+evqObS0vNHRXToFTboCa/UIpIy9/ZM9FZJBSlhTcvcvMLgMeJdySeoe7v2pm1wIL3f0h4HIzOw3oArYAF6YqHpHdlpcH42a8OVm4Q/O60CHg7z4fbpuNdYdk0bAC7v3gjm0tj97qqKpp8L5vQ/V+IXnoWQvJAHp4TSSV2rbCpqXw209Dw6oB2i3Y0W5RMTn0CVW9X7g7SndFyTBI+3MKqaKkIKOCO7RshHvOCiUMj4XShcfYMU5Fj6jtonwPOOE/Q7Ko3g/KJqQjcslSSgoi2aqjFe48NXRF3tNu0d9dUcUVMPt0qNk/JIoJ+4a2Cz3NLX1kwt1HIjIURWXwyaffvDzWHdor7p0fxtLuSRIv3RfujIoX/7xF5VQ49VswfiaMnR4a0kX6oZKCyGiwbQvUvw71S+Gp66Fl/cBtF8VVcOg54RbasdOhaiqMnQYlY9XgPUqp+khEdrRdbFkepie/MXDCgHArrfWMbzEFTrw6jHNRMSn8q5JGVlJSEJGBuUPrplAl1bA6/PvMLWFZwgbviOXBmPFw5CdCW0bNATBhn9AflWQsJQUR2T09XYE0r4OmddC8Fp66YYCShoUSRslYOPxDoQ1j/N7h2Y7KqVBQlI6zkIiSgoikVmdbuJ120xL48zXQvH5HCSNh1VRUJTVmHBx2Xnh4r6cto2paWK72jJRRUhCR9InFQoliy/LQj1RjHSy4A7bV03/SYOcnvismwTuu2pE8KqeotLEblBREJHO5w7bNoR2jsQ7+9P/t3K25O4nbNBKUNsZGSUOljQEpKYhIduvcHhJFT+J46obQvjFgFRXRLbeVMPu0qJTRkzRyu7Shh9dEJLsVloS7mibsE+aPOH/n9T2ljYZVIWk01sEzP4DWjdDeBC/cTb+ljaJy2PfEHe0ZPUlDpQ0lBRHJUmZhDO6yapgyJyw79tM7b9PZBk1rd5Q24ts2Fj+067aNsmo48uK4pDH6SxuqPhKR3OUehmuNTxqNdfDyfeF23GTaNg6f36eKamoYvCnDShtqUxARGQ59SxvJtm30DuNqUL4nHH8FjNsrdFhYNRUKx4zkWSgpiIiMiL6ljceujruTygd4OryntDEe5lwQ+qAaOz0kjbHThv0JcSUFEZFMEesOD/c1rArTE1/fUdroLWkkGEcjvqRxwn/AjON3NLwPkpKCiEi2iHWHJLF15Y7EseBH4e6q+JLG+H3h8kVDOoRuSRURyRZ5+TsaqjkuLJv3nzvWd3eFvqeKK1IeipKCiEimyy8I7Q0jIG9EjiIiIllBSUFERHopKYiISK+UJgUzO9nMlphZrZldOcB2Z5uZm9kuW8ZFRCR1UpYUzCwfuBU4BZgNzDez2Qm2qwAuB55PVSwiIpKcVJYUjgJq3X25u3cA9wGnJ9juv4Ebge0pjEVERJKQyqQwBVgdN18XLetlZkcA09z94RTGISIiSUplUkjURWDv49Nmlgd8B/jiLndkdomZLTSzhZs2bRrGEEVEJF4qH16rA6bFzU8F1sbNVwAHA09Z6GJ2T+AhMzvN3Xfqx8LdbwduBzCzTWa2cogxVQP1Q3xvptG5ZCadS2bSucBeyWyUsr6PzKwAWAqcCKwBFgAfcvdX+9n+KeBLfRPCMMe0MJm+P7KBziUz6Vwyk84leSmrPnL3LuAy4FFgMXC/u79qZtea2WmpOq6IiAxdSvs+cvdHgEf6LLu6n23npTIWERHZtVx7ovn2dAcwjHQumUnnkpl0LknKuvEUREQkdXKtpCAiIgNQUhARkV45kxSS7ZwvU5nZCjP7l5m9aGYLo2XjzewxM3s9+ndcuuNMxMzuMLONZvZK3LKEsVvw/eg6vWxmc9IX+Zv1cy7XmNma6Nq8aGanxq27KjqXJWZ2UnqifjMzm2ZmT5rZYjN71cw+Fy3PuusywLlk43UpMbN/mNlL0bn8V7R8ppk9H12XX5hZUbS8OJqvjdbP2O0g3H3UT0A+sAzYGygCXgJmpzuuQZ7DCqC6z7IbgSuj11cCN6Q7zn5ifzswB3hlV7EDpwJ/IDwRfwzwfLrjT+JcriE8Y9N329nR31oxMDP6G8xP9zlEsU0C5kSvKwjPFM3OxusywLlk43UxoDx6XUjoKPQY4H7gvGj5D4FPRa8/Dfwwen0e8IvdjSFXSgrJds6XbU4HfhK9/glwRhpj6Ze7/wXY0mdxf7GfDvzUg+eAsWY2aWQi3bV+zqU/pwP3uXu7u78B1BL+FtPO3de5+wvR62bCs0RTyMLrMsC59CeTr4u7e0s0WxhNDrwTeCBa3ve69FyvB4ATLeoiYqhyJSnssnO+LODAn8xskZldEi3bw93XQfgfA5iYtugGr7/Ys/VaXRZVq9wRV42XFecSVTkcQfhVmtXXpc+5QBZeFzPLN7MXgY3AY4SSTIOHB4Jh53h7zyVa3whM2J3j50pSGLBzvixxnLvPIYxP8Rkze3u6A0qRbLxWtwH7AIcD64BvR8sz/lzMrBx4EPi8uzcNtGmCZZl+Lll5Xdy9290PJ/QXdxRwYKLNon+H/VxyJSnsqnO+jOfua6N/NwK/JvyxbOgpwkf/bkxfhIPWX+xZd63cfUP0P3IM+D92VEVk9LmYWSHhS/Rn7v6raHFWXpdE55Kt16WHuzcATxHaFMZG/cnBzvH2nku0vorkqzcTypWksACYFbXgFxEaZB5Kc0xJM7MyCyPUYWZlwHuAVwjn8NFos48Cv01PhEPSX+wPAR+J7nY5Bmjsqc7IVH3q1s8kXBsI53JedIfITGAW8I+Rji+RqN75x8Bid785blXWXZf+ziVLr0uNmY2NXo8B3kVoI3kSODvarO916bleZwNPeNTqPGTpbm0fqYlw98RSQv3cV9IdzyBj35twt8RLwKs98RPqDh8HXo/+HZ/uWPuJ/15C8b2T8Mvm4/3FTigO3xpdp38Bc9MdfxLncncU68vR/6ST4rb/SnQuS4BT0h1/XFxvI1QzvAy8GE2nZuN1GeBcsvG6HAr8M4r5FeDqaPnehMRVC/wSKI6Wl0TztdH6vXc3BnVzISIivXKl+khERJKgpCAiIr2UFEREpJeSgoiI9FJSEBGRXkoKIiLSS0lBJAlmdnifrpdPs2Hqgt3MPm9mpcOxL5HdpecURJJgZhcSHti6LAX7XhHtu34Q78l39+7hjkVEJQUZVcxsRjTYyv9Fg5T8KeouING2+5jZH6OeZ/9qZgdEy88xs1eigU7+EnWNci3wwWiwlg+a2YVmdku0/V1mdls00MtyMzsh6pVzsZndFXe828xsYZ/BUy4HJgNPmtmT0bL5FgZUesXMboh7f4uZXWtmzwPHmtn1ZvZa1AvoTan5RCXnpPuxbk2ahnMCZgBdwOHR/P3A+f1s+zgwK3p9NKHfGAhdI0yJXo+N/r0QuCXuvb3zwF2EMTqM0L99E3AI4UfXorhYerqMyCd0dHZoNL+CaAAlQoJYBdQABcATwBnROgfO7dkXoYsGi49Tk6bdnVRSkNHoDXd/MXq9iJAodhJ1s/xW4JdR3/X/SxjBC+DvwF1mdjHhCzwZv3N3JySUDe7+Lw+9c74ad/xzzewFQt82BxFGAOvrSOApd9/koX/8nxFGewPoJvQECiHxbAd+ZGZnAduSjFNkQAW73kQk67THve4GElUf5REGLjm87wp3v9TMjgbeC7xoZm/aZoBjxvocPwYURL1xfgk40t23RtVKJQn2M9CoWds9akdw9y4zOwo4kdDr72WE0blEdotKCpKTPAzC8oaZnQO9A9MfFr3ex92fd/ergXpCf/XNhPF/h6oSaAUazWwPwmBJPeL3/TxwgplVm1k+MB94uu/OopJOlbs/AnyeMJCMyG5TSUFy2YeB28zsq4SxcO8jdE/+LTObRfjV/ni0bBVwZVTV9M3BHsjdXzKzfxKqk5YTqqh63A78wczWufs7zOwqQv/5Bjzi7onGyagAfmtmJdF2XxhsTCKJ6JZUERHppeojERHppeojGfXM7FbguD6Lv+fud6YjHpFMpuojERHppeojERHppaQgIiK9lBRERKSXkoKIiPT6/wFteIAmY57fnwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "        \n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(0, cvresult.shape[0])\n",
    "        \n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators4_1.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 115,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\ipykernel_launcher.py:1: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "最佳参数n_estimators%d 300\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1000x1000 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "print('最佳参数n_estimators%d',cvresult.shape[0])\n",
    "cvresult = cvresult.iloc[50:]\n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(50,cvresult.shape[0]+50)\n",
    "        \n",
    "fig = pyplot.figure(figsize=(10, 10), dpi=100)\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators_detail.png' )\n",
    "\n",
    "pyplot.show()\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 调整树的参数：max_depth & min_child_weight"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 116,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.58801, std: 0.00325, params: {'max_depth': 4, 'min_child_weight': 1},\n",
       "  mean: -0.58814, std: 0.00363, params: {'max_depth': 4, 'min_child_weight': 3},\n",
       "  mean: -0.58800, std: 0.00360, params: {'max_depth': 4, 'min_child_weight': 5},\n",
       "  mean: -0.58139, std: 0.00399, params: {'max_depth': 6, 'min_child_weight': 1},\n",
       "  mean: -0.58077, std: 0.00349, params: {'max_depth': 6, 'min_child_weight': 3},\n",
       "  mean: -0.58084, std: 0.00337, params: {'max_depth': 6, 'min_child_weight': 5},\n",
       "  mean: -0.58701, std: 0.00355, params: {'max_depth': 8, 'min_child_weight': 1},\n",
       "  mean: -0.58485, std: 0.00399, params: {'max_depth': 8, 'min_child_weight': 3},\n",
       "  mean: -0.58348, std: 0.00367, params: {'max_depth': 8, 'min_child_weight': 5}],\n",
       " {'max_depth': 6, 'min_child_weight': 3},\n",
       " -0.5807656512480212)"
      ]
     },
     "execution_count": 116,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "max_depth = range(4,9,2)\n",
    "min_child_weight = range(1,6,2)\n",
    "param_test2_1 = dict(max_depth=max_depth, min_child_weight=min_child_weight)\n",
    "\n",
    "xgb2_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=300,  #第一轮参数调整得到的n_estimators最优值\n",
    "        gamma=0,\n",
    "        subsample=1,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softmax',\n",
    "        seed=6)\n",
    "\n",
    "\n",
    "gsearch2_1 = GridSearchCV(xgb2_1, param_grid = param_test2_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch2_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch2_1.grid_scores_, gsearch2_1.best_params_,     gsearch2_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([275.4875782 , 275.61264844, 276.15519795, 398.50037565,\n",
       "        398.76586637, 400.13201056, 525.22184792, 516.16766453,\n",
       "        420.47340512]),\n",
       " 'mean_score_time': array([0.75837216, 0.7386251 , 0.65165772, 1.35836697, 1.53130469,\n",
       "        1.25524373, 2.56593828, 2.63116307, 2.13868752]),\n",
       " 'mean_test_score': array([-0.58800842, -0.58814475, -0.5880021 , -0.58139426, -0.58076565,\n",
       "        -0.58084148, -0.58700784, -0.5848502 , -0.58348027]),\n",
       " 'mean_train_score': array([-0.53727428, -0.53925388, -0.53993217, -0.44504842, -0.44998898,\n",
       "        -0.45487374, -0.3134661 , -0.33185037, -0.34534334]),\n",
       " 'param_max_depth': masked_array(data=[4, 4, 4, 6, 6, 6, 8, 8, 8],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_min_child_weight': masked_array(data=[1, 3, 5, 1, 3, 5, 1, 3, 5],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'max_depth': 4, 'min_child_weight': 1},\n",
       "  {'max_depth': 4, 'min_child_weight': 3},\n",
       "  {'max_depth': 4, 'min_child_weight': 5},\n",
       "  {'max_depth': 6, 'min_child_weight': 1},\n",
       "  {'max_depth': 6, 'min_child_weight': 3},\n",
       "  {'max_depth': 6, 'min_child_weight': 5},\n",
       "  {'max_depth': 8, 'min_child_weight': 1},\n",
       "  {'max_depth': 8, 'min_child_weight': 3},\n",
       "  {'max_depth': 8, 'min_child_weight': 5}],\n",
       " 'rank_test_score': array([8, 9, 7, 3, 1, 2, 6, 5, 4]),\n",
       " 'split0_test_score': array([-0.58280147, -0.58234832, -0.58216535, -0.57517284, -0.57596439,\n",
       "        -0.57591949, -0.58174314, -0.57889474, -0.57764063]),\n",
       " 'split0_train_score': array([-0.53852529, -0.54026234, -0.54089245, -0.44621138, -0.45150698,\n",
       "        -0.45404769, -0.31145074, -0.33307434, -0.34772309]),\n",
       " 'split1_test_score': array([-0.58660215, -0.58622137, -0.5861055 , -0.5800218 , -0.57847559,\n",
       "        -0.57916185, -0.58521993, -0.58495832, -0.58295912]),\n",
       " 'split1_train_score': array([-0.53733796, -0.53856522, -0.53953888, -0.44578726, -0.44966265,\n",
       "        -0.45372381, -0.31697102, -0.33176973, -0.3424853 ]),\n",
       " 'split2_test_score': array([-0.58775111, -0.58830046, -0.58842939, -0.58056306, -0.57994101,\n",
       "        -0.58017934, -0.5861687 , -0.58212387, -0.58221801]),\n",
       " 'split2_train_score': array([-0.53732956, -0.53931913, -0.53924739, -0.44422402, -0.44980319,\n",
       "        -0.45559104, -0.31352675, -0.33097172, -0.3464172 ]),\n",
       " 'split3_test_score': array([-0.5915534 , -0.59190312, -0.59143189, -0.5844455 , -0.58421473,\n",
       "        -0.58329885, -0.59141442, -0.58892961, -0.58620515]),\n",
       " 'split3_train_score': array([-0.5372496 , -0.53862851, -0.5408006 , -0.44474963, -0.44891408,\n",
       "        -0.45578536, -0.31295868, -0.33323518, -0.34393903]),\n",
       " 'split4_test_score': array([-0.59133496, -0.59195167, -0.59187952, -0.58676973, -0.58523389,\n",
       "        -0.58564933, -0.59049406, -0.58934583, -0.58837995]),\n",
       " 'split4_train_score': array([-0.53592898, -0.53949421, -0.53918155, -0.44426982, -0.45005802,\n",
       "        -0.45522081, -0.31242332, -0.33020085, -0.3461521 ]),\n",
       " 'std_fit_time': array([ 0.94496107,  0.98179325,  0.3188144 ,  0.62761673,  0.88276226,\n",
       "         3.6354693 ,  0.48242855, 12.83332318,  1.78518035]),\n",
       " 'std_score_time': array([0.05976199, 0.10041031, 0.0201704 , 0.26532688, 0.43817496,\n",
       "        0.16279447, 0.85141081, 0.94727257, 0.49454428]),\n",
       " 'std_test_score': array([0.00324927, 0.00363152, 0.00359568, 0.00398704, 0.00348814,\n",
       "        0.00336559, 0.00355499, 0.00399407, 0.00367137]),\n",
       " 'std_train_score': array([0.00082251, 0.00062359, 0.00075675, 0.00080913, 0.00084918,\n",
       "        0.00083315, 0.00188121, 0.00117603, 0.00187675])}"
      ]
     },
     "execution_count": 117,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch2_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 141,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZoAAAELCAYAAADgPECFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xl8VOXZ+P/PNdkXCIGwh8iuuLBGQakWRNGKDaEu1YpfN6QWW5c+qPjVLj711yfq90et1vpon6fV6mPF5ZuAQlEWkbphE4qg4BIQMQTZBAJJSGa5vn/MSZgkk2SynEwC15vXvObMOfc555oTZq6573POfYuqYowxxrjFE+0AjDHGHN8s0RhjjHGVJRpjjDGuskRjjDHGVZZojDHGuMoSjTHGGFdZojHGGOMqSzTGGGNcZYnGGGOMq2KjHUBnkJGRoYMHD452GMYY06UUFRXtU9XezZWzRAMMHjyYwsLCaIdhjDFdioh8FUk5azozxhjjKks0xhhjXGWJxhhjjKss0RhjjHGVJRpjjDGuskRjjDHGVZZojDHGuMruozGmMwkEoGIflO2EslI4sjs4X2LAEwueGGe65hFb93VoOU8siKdeuVjweBopF9twGyLRPR7muGCJxpiOEghA+V4niTiJpGwnHAqZPrwL/NXRjvQY8USQ5Dz1EllMvbKxkSfHiJNopNuvl0Sbijlsuab2XS9mS8qNskRjTHsIBKB8T8PEEZpQynZBwFt3vZh46D4Aug+EQWcFn7sPDM5LGwipfQGBgA/UDwHnof7gvNrpmocvZFmgbrmADzQQvlyd7deU89XbVzPlapcF6m3fHyznO1qvXP33EuH2OyvxNJOg2lLDrJ9Em1ovTLmmku+gSdB7pKuHxhKNMc0J+OHIHidhlISpiZTC4dLgF2GomIRjSSTr7GPTNYmk+0BIybBfwi3VWCJrkPDCJOU6iTmSpNzOyTaScgE/aHULknIT24/EjIXHZ6IRkZ7AImAwsB24UlUPhCnnBzY5L3eoao4zfxrwCMGLGY4A16tqsYicBzwKjAauUtVXXH4rpqsL+IPnQcpK4VBJmJpIabA5q34SiU08lixOOseZHgBpmcfmJ/eyJOIGjwc88dGOomuIJCEl9XA9jGjVaBYAq1Q1T0QWOK/vCVOuUlXHhpn/JDBTVbeIyDzgfuB6YIfzPN+VqE3X4vcdSyK1NZHQhOIkkfq//GITj9U6Bn/nWBLpHppEeloSMZ1fJ0nK0Uo0M4EpzvSzwBrCJ5rGKNDdmU4DSgFUdTuAiATaIUbTmfl9cOSbhomjrH4SqfdfITYpeO6j+wAYcl74mkhSuiURY9pRtBJNX1XdBaCqu0SkTyPlEkWkEPABeapa4MyfAywTkUqgDJjkesSm4/i9cPibhk1YoQnlyDcNk0hccjBRpA2EoVManhNJGwiJPSyJGNPBXEs0IrIS6Bdm0X0t2EyWqpaKyFBgtYhsUtWtwJ3AJaq6TkTuAhYSTD4tiW8uMBcgKyurJauatvB7gzWNQ/WvyHKmD+107h3RuuvFpTg1kYEw7PxjiSP0xHpimiURYzoh1xKNql7Q2DIR2S0i/Z3aTH9gTyPbqGkS2yYia4BxIlIGjFHVdU6xRcDyVsT3NPA0QHZ2tjZT3ETCVx1MIg3uEQl5fWQPDZJIfOqxmkifUSG1kJCaSEJ3SyLGdFHRajpbAlwH5DnPi+sXEJF0oEJVq0QkA5gMPAwcANJEZKSqfg5cCGzpsMhPVL6qkJpImHtEDu0M3kdSX0L3Ywmj72kh50JCTq4ndm+4njHmuBGtRJMHvCQiNxG8UuwKABHJBm5R1TnAKOAp58S+h+A5ms1OuZuBV51lB4AbnflnAvlAOvB9EXlAVU/r2LfWBfmqQpJHmLvVy3YG72ivLyHt2In1fmeEXJXlnFzv1t+SiDEGUbVWo+zsbC0sLIx2GO7wHq17Qj1cTaRiX8P1EtMaJo46NZH+kNCt49+PMabTEJEiVc1urpz1DNCVeSvr1kTCXeZbsb/heknpx5qzBoyvey6k+8BgTSQhtePfjzHmuGSJprOqrqjXnBV6w6FTK6n8tuF6ST2PJY7MM+td4jswWBOJT+n492OMOWFZoomG6vJ6NZEwl/pWNuiRJ9ilSU3NY9BZx5JIaE0kPrnj348xxjTBEk17qy5v+h6Rsp1w9GDD9ZIzgomjRxZkTarX5YnziEvq+PdjjDFtZImmLba+BZ/k100oRw81LJfSO5go0gcf64Ax9OR6twEQl9jh4RtjTEewRNMW+z6Hz/4eTBY9h4Z0wFivJhKbEO1IjTEmaizRtMVZc2Hij6MdhTHGdGqeaAfQpVmXKMYY0yxLNMYYY1xlicYYY4yrLNEYY4xxlSUaY4wxrrJEY4wxxlWWaIwxxrjKEo0xxhhXWaIxxhjjKks0xhhjXGWJxhhjjKuikmhEpKeIrBCRL5zn9EbK+UVkg/NYEjJ/moisd+a/IyLDnfk/F5HNIrJRRFaJyEkd9Z6MMcaEF60azQJglaqOAFY5r8OpVNWxziMnZP6TwDWqOhZ4Abjfmf8vIFtVRwOvAA+7E74xxphIRSvRzASedaafBXJbuL4C3Z3pNKAUQFXfUtUKZ/4HQGYb4zTGGNNG0RomoK+q7gJQ1V0i0qeRcokiUgj4gDxVLXDmzwGWiUglUAZMCrPuTcDfGwtAROYCcwGysrJa9y6MMcY0y7VEIyIrgX5hFt3Xgs1kqWqpiAwFVovIJlXdCtwJXKKq60TkLmAhweRTs+/ZQDbw3cY2rKpPA08DZGdnawtiMsYY0wKuJRpVvaCxZSKyW0T6O7WZ/sCeRrZR0yS2TUTWAONEpAwYo6rrnGKLgOUh276AYDL7rqpWtc+7McYY01rROkezBLjOmb4OWFy/gIiki0iCM50BTAY2AweANBEZ6RS9ENjilBsHPAXkqGrY5GWMMaZjRescTR7wkojcBOwArgAQkWzgFlWdA4wCnhKRAMGEmKeqm51yNwOvOssOADc6230ESAVeluDolzvqXa1mjDGmg4mqnZ7Izs7WwsLCaIdhjDFdiogUqWp2c+WsZwBjjDGuskRjjDHGVZZojDHGuMoSjTHGGFdZojHGGOMqSzTGGGNcZYnGGGOMqyzRGGOMcZUlGmOMMa6yRGOMMcZVlmiMMca4yhKNMcYYV1miMcYY4ypLNMYYY1xlicYYY4yrLNEYY4xxlSUaY4wxropKohGRniKyQkS+cJ7TGynnF5ENzmNJyPxpIrLemf+OiAx35t8iIptC5p/aUe/JGGNMeNGq0SwAVqnqCGCV8zqcSlUd6zxyQuY/CVyjqmOBF4D7nfkvqOoZzvyHgYUuxW+MMSZC0Uo0M4FnnelngdwWrq9Ad2c6DSgFUNWykDIpTjljjDFRFBul/fZV1V0AqrpLRPo0Ui5RRAoBH5CnqgXO/DnAMhGpBMqASTUriMitwM+BeOB8t96AMcaYyLhWoxGRlSLycZjHzBZsJktVs4EfAY+KyDBn/p3AJaqaCfyFkCYyVX1CVYcB93CsSS1cfHNFpFBECvfu3dvi92eMMSYyotrxrUsi8hkwxanN9AfWqOrJzazzDPA68DbwgZNMEJEsYLmqnlqvvAc4oKppzcWTnZ2thYWFrXszxhhzghKRIqcy0KRonaNZAlznTF8HLK5fQETSRSTBmc4AJgObgQNAmoiMdIpeCGxxyo0I2cQM4AtXojfGGBOxaJ2jyQNeEpGbgB3AFQAikg3coqpzgFHAUyISIJgQ81R1s1PuZuBVZ9kB4EZnuz8VkQsArzP/OowxxkRVVJrOOhtrOjPGmJbr7E1nxhhjThCWaIwxxrjKEo0xxhhXWaIxxhjjKks0xhhjXGWJxhhjjKss0RhjjHFVtG7YNMYYEwX+gJ/PDnxG0e4iinYXcdUpVzGp/6TmV2wDSzTGGHMcq/ZX88n+TyjaXUTh7kI27NlAubccgMzUTA5WHXQ9BusZAOsZwJiW8nq9lJSUcPTo0WiHYuoJaABvwEu1v5oqfxVevxd1huaK9cSSEJNAfEw88Z54YjwxEW0zMTGRzMxM4uLi6syPtGeAFtVonCGXB6nqxpasZ4w5vpSUlNCtWzcGDx6MiEQ7nBOaL+CjwltBha+CCm8Flb5K4px/vWJ7kRKXQnJsMslxycR6Wt6Ipars37+fkpIShgwZ0qoYm92riKwBcpyyG4C9IvK2qv68VXs0xnR5R48etSQTJV6/tzaplPvKqfJVASAiJMUmkZGUQUpcCkmxSRHXWJoiIvTq1Yu2jNsVSXpLU9UyEZkD/EVVfyUiVqMx5gRnScZ9qoo34KXcW16bXKr91QB4xENyXDJpyWkkxyWTFJuER9y5kLitf+tIEk2sMzjZlcB9bdqbMcaYRqkqVf6q2qawcm85voAPgBhPDMmxyaQnppMSm0JibGKXSfaRpL9/B94AilX1nyIyFBtQzBgTRQcPHuSPf/xjq9Z99NFHqaioaOeIWkdVqfRWsq9yHzvKdjDx3IksXrOYXeW7KPeWkxKXQv+U/gzrMYyT008mq3sWGUkZJMUlNUgyBQUFbN68ufb1lClTiPQiJ7/fz7hx47j00kvb9f3VaDbRqOrLqjpaVec5r7ep6mWuRGOMMRHoqokmoAHKveXsrdjLV2Vf8em3n7Lt0DZ2l++myl9FjMTQO6k3I9JHMDJ9JJndMumZ1DOi2kv9RNMSv//97xk1alSr1o1EJBcDPAw8CFQCy4ExwB2q+rxrURljuowHXvuEzaVl7brNUwd051ffP63R5QsWLGDr1q2MHTuWCy+8kD59+vDSSy9RVVXFrFmzeOCBBygvL+fKK6+kpKQEv9/PL37xC3bv3k1paSlTp04lIyODt956K+z2U1NTufXWW1m5ciXp6en89re/5e6772bHjh08+uij5OTksH37dq699lrKy4P3pPzhD3/gnHPOIT8/nyeeeIIVK1aws3QnU6ZMIf+NfFJ7pVLpq6TmlpKE2ATiA/HcfevdfP7p55w66lQC1QG6J3QnPiaeN998k1/96ldUVVUxbNgw/vKXv5CamsrgwYP54Q9/WBv7Cy+8wJ49e1iyZAlvv/02Dz74IK+++ioAL7/8MvPmzePgwYP893//N+eee26D91pSUsLSpUu57777WLhwYZv+bo2JpOlsuqqWAZcCJcBI4C5XojHGmAjk5eUxbNgwNmzYwIUXXsgXX3zBhx9+yIYNGygqKmLt2rUsX76cAQMG8NFHH/Hxxx9z8cUXc9tttzFgwADeeuutRpMMQHl5OVOmTKGoqIhu3bpx//33s2LFCvLz8/nlL38JQJ8+fVixYgXr169n0aJF3HbbbfgCPqZdMo20jDR+/civueaGa/jxXT/G092DqtIzsSeDug3i5J4nM7zHcBY/t5i01DQ2bdzEfffdR1FREQD79u3jwQcfZOXKlaxfv57s7Ow6SaB79+58+OGH/PSnP+WOO+7gnHPOIScnh0ceeYQNGzYwbNgwAHw+Hx9++CGPPvooDzzwAAClpaVccskltdu64447ePjhh/F43OuRLJKLAWru0LkE+JuqftvWE1Ai0hNYBAwGtgNXquqBMOX8wCbn5Q5VzXHmTwMeIZgojwDXq2pxyHqXAy8DZ6qq3YlpjIuaqnl0hDfffJM333yTcePGAXDkyBG++OILzj33XObPn88999zDpZdeGvbXfGPi4+O5+OKLATjjjDNISEggLi6OM844g+3btwPBm1bn3TqPDRs2gAe2FW/js28/A2D+/zefWefOIvusbH5y/U8avdR47dq13HbbbQCMHj2a0aNHA/DBBx+wefNmJk+eDEB1dTVnn3127XpXX3117fOdd97Z6Pv4wQ9+AMCECRNq4x4wYADLli0D4PXXX6dPnz5MmDCBNWvWRHx8WiqSRPOaiHxKsOlsnoj0Btp6O/ACYJWq5onIAuf1PWHKVarq2DDznwRmquoWEZkH3A9cDyAi3YDbgHVtjNEY0wWoKvfeey8//vGPGywrKipi2bJl3HvvvUyfPr22NtKcuLi42nMiHo+HhISE4KXG6sXn87Hz8E7yfptHXFocL65+ERTGDRxHn+Q+JMcls3XXVuJi4ji47yDJsclN1hbC/XBXVS688EL+9re/NbtOUz/8ExISAIiJicHn8zVY/u6777JkyRKWLVvG0aNHKSsrY/bs2Tz/fPueGYnkYoAFwNlAtqp6gXJgZhv3OxN41pl+Fsht4foKdHem04DSkGW/AR6m7cnQGNNJdevWjcOHDwNw0UUX8ec//5kjR44AsHPnTvbs2UNpaSnJycnMnj2b+fPns379+gbrNkVVOeo7SqW3koNVB/n8wOcUHygmoAEOew9TeaSSoYOGMrzncP659J/4/X56J/cmQRK46cabeOGFFxg1alST5z3OO+88/ud//geAjz/+mI0bg7coTpo0iXfffZfi4mBDTUVFBZ9//nnteosWLap9rqnpRPq+Qv3Hf/wHJSUlbN++nRdffJHzzz+/3ZMMRHYxQBxwLXCekznfBv6zjfvtq6q7AFR1l4j0aaRcoogUAj4gT1ULnPlzgGUiUgmUAZOcWMcR7CLndRGZ38YYjTGdVK9evZg8eTKnn3463/ve9/jRj35U+4WbmprK888/T3FxMXfddRcej4e4uDiefPJJAObOncv3vvc9+vfvX+c8TUADHPUdpcJXgaJ89u1n+NXPYe9hUv2pwa5c4pLxiIeT00/mnjvu4bLLLmNZwTKmTp1KSkoKAL/97W8599xzOffccxk7dixnnnkmM2bMCHtV109+8hNuuOEGRo8ezdixYznrrLMA6N27N8888wxXX301VVXBO/8ffPBBRo4cCUBVVRUTJ04kEAjU1nquuuoqbr75Zh577DFeeeWVRo9daWkpc+bMqW0+6wjNdqopIv9F8DxNTQ3kWsCvqnOaWW8l0C/MovuAZ1W1R0jZA6qaHmYbA1S11Ll3ZzUwTVW3isj/BR5S1XUichdwMjDXKXO9qm53us6Z39g5GhGZ66xDVlbWhK+++qqpt2OMCbFlyxZXL4ftCAENUOmrDN517/QRFtAAAPEx8STHJZMSG0wucZ64TnNz5ODBgyksLCQjI6ND9xvub96enWqeqapjQl6vFpGPmltJVS9obJmI7BaR/k5tpj+wp5FtlDrP25zEMU5EyoAxqlpzDmYRwcuuuwGnA2uc/xD9gCUikhMu2ajq08DTEOy9ubn3Y4zp2vwBf203LhW+igaXGvdI6EFyXHJtYjHtJ5JE4xeRYaq6FcCpXfjbuN8lwHVAnvO8uH4Bp6foClWtEpEMYDLBcy8HgDQRGamqnwMXAltU9RCQEbL+Gpqo0Rhjjm81vRqX+4I1lqO+4GlbQUiMS6RnYk8unXop3movwrHaynPPPccZZ5zRrrG88cYb3HNP3eudhgwZQn5+fou3VXP1WFcSSaK5C3hLRLYBApwE3NDG/eYBL4nITcAO4AoAEckGbnGa5UYBT4lIgOBFC3mqutkpdzPwqrPsAHBjG+MxxnRxXr+3NqlUeCuo8h/r1Tg5Npneyb1Jjk2uc6lx4Ycd8zv0oosu4qKLLuqQfXVGzSYaVV0lIiMIngcR4FMg3CXHEVPV/cC0MPMLCZ7oR1XfA8L+rFDVfKDJnwKqOqUtMRpjOi9VpTpQXZtUyn3leP1eIKRX44Q0UuKCnU+61auxiUxEo+CoahVQOzSAiLwMZLkVlDHGhKrp1Ti0u/zQXo1T4lLoldiL5LhkEmO6Tq/GJ4qWD7cWZH9FY4xrQi81rvAGu8uvuSIszhNXe6lxSmwK8THxllg6udYmGrtKyxjTbgIaoNJbWXuOpf6lxmkJabXDEcfHxEc5WtNSjTZcishrIrIkzOM1oFcHxmiMOc74A34OVx9md/luth3axqfffsr2su3srdiLX/30SOzBoG6DGNlzJCPSRzAgdQA9EnvUJpmuOkxAc1oyhkx9rR2P5uDBg1x++eWccsopjBo1ivfff79V+29KUzWa/9PKZcYYU0dzlxrXnF9Jjk2OaJz7mkQzb968Fsfy6KOPMnv2bJKTk1u8bmdWUFDApZdeyqmnntqi9W6//XYuvvhiXnnlFaqrq11Jwo0mGlV9u933Zow5/vx9AXyzqc6sAAECgQB+9eNXP6pKDNBdIF1i8IiHGOdZwp3y7XcGfC+v0V12lfFovvnmG7773e+ydu1a+vVr2FFKZWUlN9xwA5s3b2bUqFFUVlbWLuuI8WjKyspYu3YtzzzzDBDstTo+vv2bJu2aP2NMmyhKQAN4A97gePe+Ciq9lVT5q/CpD494iI+JJzE2keTY4FVh8Z54YiQmfJKJQGcdjwZg1qxZ9OvXjyeeeIKbb76ZBx54IGySAXjyySdJTk5m48aNURmPZtu2bfTu3ZsbbriBcePGMWfOnNrE2Z5aezGAMeYE5Q/48Qa87K/cT4WvgvKJN+APBDsLifXE1jaBpcSlkBCT4PoVYdEcj+anP/0pGzZsICYmpk7vyo8//jinn346kyZNqh07Jpxoj0fj8/lYv349jz/+OBMnTuT2228nLy+P3/zmNxEfq0hYojHGNMnr9/LJ/k8o2l3E+j3r+dfuf/GbEb8hpjyGuJg4UuOcno1jk6NyqXFHjUdTM10zrsvvfvc7+vbty0cffUQgECAxMbF2/Z07d+LxeNi9ezeBQKDTjkeTmZlJZmYmEydOBODyyy8nL6/xJsvWarbprJGrz54TkdtFJLG59Y0xXUulr5J1u9bxxw1/5KY3buKcv53DtX+/lkfXP0rJ4RIuHnIx6YnpjEgfwcj0kWR2yyQ9MZ2EWPdrLzU6Yjya5hw6dIj+/fvj8Xh47rnn8PuDtTqfz8cNN9zQJcaj6devH4MGDeKzz4Ijg65atarFFxNEIpIazTagN1CTWn8I7AZGAn8iOGyAMaaLKqsuY8OeDRTuLqRodxGb922uPbdycvrJXD7ycib0ncC4PuPolRS8s2HLli1RvZ/FjfFoWmrevHlcdtllvPzyy116PJrHH3+ca665hurqaoYOHcpf/vKXVh+TxkQyHs1aVT0v3DwR+URVoztgeDvIzs7W1l67bkxXs69yH+t3r6dodxFFu4v4/MDnKEqsJ5YzMs5gQt8JTOg7gbG9x5Ianxp2G8fDeDRd1fE6Hk1vEclS1R3OhrM41h1/dUuDNcZ0rNIjpbVJpWh3EdvLtgOQFJvEmN5jmDd2HhP6TuCMjDNIjLXWcNP+Ikk0/wa8IyJbCfZxNgSYJyIpHBt10xjTCagqXx76kqI9xxLLN+XfANAtvhsT+kzgshGXMaHvBE7pdcoJP8DXxIkTa5umath4NO2v2aYzABFJAE7BGSZAVY+6HVhHsqYz01X5A34+O/BZbVPY+j3r+fbotwBkJGXUNoNN6DuB4T2Gt1t3+dZ0duJxtelMROKAHwM152nWiMhTquptTbDGmNar9lfXXmpctLuIDXs2cMQbvNoqMzWT7wz8Dtl9s5nQdwKDug2yXo1NpxBJ09mTQBxQ04Pdtc68OW4FZYwJqvBW8NHej1i/J1hj2bh3Y+3IkcN7DOeSIZcwoe8ExvcdT7+U8HefGxNtkSSaM1V1TMjr1SLykVsBGXOi8wV8vLPzHQqKC3i75G18geClxqN6juLKk68MJpY+40lPTI92qMZEJJJE4xeRYaq6FUBEhgL+tuxURHoCi4DBwHbgSlU9EKacH6jprW+HquY486cBjxC84fQIcL2qFovI9c78nc46f1DV/2pLrMZ0lK0Ht1JQXMBrW19j/9H99EzsydWnXM3kAZMZ03tMo5caG9PZRXJm8C7gLRFZIyJvA6sJXonWFguAVao6AljlvA6nUlXHOo+ckPlPAteo6ljgBeD+kGWLQtaxJGM6tcPVh3nps5e4Zuk15C7O5fnNzzOm9xgem/oYK69Yyd1n3s3kgZMtydRj49E01NrxaH73u99x2mmncfrpp3P11Vdz9Gj7X+vVbKJR1VXACOA253Ey0Na/0kyOXRr9LJDbwvUV6O5MpwGlbYzHmA4T0AAf7PqAe9bew9SXpvKbD35Dha+C+dnzWXnFSn5//u+ZmjX1hL/0uCnHa6Jpi/qJJhI7d+7kscceo7CwkI8//hi/38+LL77Y7rFF1KmmqlYBG2tei8jLQFYb9ttXVXc5294lIn0aKZcoIoWAD8hT1QJn/hxgmYhUAmXApJB1LhOR84DPgTtV9es2xGlMuyk5XMLirYtZUryE0vJSusV3I3d4LrOGz+LUXqd22SvEHvrwIT799tN23eYpPU/hnrPuaXS5jUfTPuPRQLBvtsrKSuLi4qioqGDAgAGR/6Ei1Nrem5v9RIjISiDcZTD3tWA/Wapa6pwXWi0im5xzRXcCl6jqOhG5C1hIMPm8BvxNVatE5BaCtaXzG4lvLjAXICurLTnTmMZV+ipZ+dVKCooL+PCbDxGEsweczR0T7uD8rPNJiEmIdohdUl5eHh9//DEbNmzgzTff5JVXXuHDDz9EVcnJyWHt2rXs3buXAQMGsHTpUiDYCWZaWhoLFy7krbfearILl5rxaB566CFmzZpVOx7N5s2bue6668jJyakdjyYxMZEvvviCq6++msLCQmbNmsWrr77KE088wfLlyyMej2bjxo2MHz8eqDseTUpKCg899BALFy6s7X26Zjyav/71r9xxxx28/vrr5OTkcOmll3L55ZfXbr9mPJply5bxwAMPsHLlyjp9nQ0cOJD58+eTlZVFUlIS06dPZ/r06e31Z6rV2kTT7F2eqnpBY8tEZLeI9HdqM/2BPY1so9R53iYia4BxIlIGjFHVdU6xRcByp9z+kNX/BDzURHxPA09D8IbN5t6PMZFSVT7a+xEFxQUs376ccm85g7oN4qdjf0rOsBz6p/aPdojtqqmaR0ew8WhaPx7NgQMHWLx4MV9++SU9evTgiiuu4Pnnn2f27NkRH6tINJpoROQ1wicUAXq1cb9LgOuAPOd5cZj9pwMVTu0kA5gMPAwcANJEZKSqfg5cCGxx1ulf0yQH5NTMN6Yj7KnYw2tbX6OguIDtZdtJik1i+knTyR2ey4S+E7ps01hnZ+PRtH48mpUrVzJkyBB69+4NBBNA+RyqAAAZy0lEQVTTe++913GJBvg/rVwWiTzgJRG5CdgBXAEgItnALao6BxgFPCUiAYIXLeSp6man3M3Aq86yA8CNznZvE5Ecgud0vgWub2OcxjTJ6/eypmQN+V/k827puwQ0wPg+47nx9BuZPng6KXEp0Q7xuFR/PJpf/OIXXHPNNaSmprJz507i4uLw+Xz07NmT2bNnk5qayjPPPFNn3bb2fnzo0CEyMzPxeDw8++yzYcej+etf/8rChQuZP39+2G3UjEczderUBuPR3HrrrRQXFzN8+HAqKiooKSmpHSZg0aJFLFiwoM3j0WRlZfHBBx9QUVFBUlISq1atIju72R5lWqzRRKOqb7f73o5tez8wLcz8QpweB1T1PSBsz3aqmg806I1OVe8F7m3XYI0J49NvP6WguICl25ZysOogfZL7cOPpNzJz2EwGpw2OdnjHPRuPpn3Go5k4cSKXX34548ePJzY2lnHjxjF37txWH5PGRNSp5vHOOtU0kTh49CBLv1zK4uLFbPl2C3GeOM7POp/c4bmc3f9sYjwx0Q6xw1inmtFzvI5HY8wJyx/w817pe+QX57Pm6zV4A15G9RzFvWfdy4yhM0hLSIt2iMZ0ei1KNCLST1W/cSsYYzqL7Ye213YHs6dyD+kJ6fzw5B+SOzyXk3ueHO3wTDux8Wg6RktrNMuA8W4EYky0lXvLeWP7GxQUF/CvPf8iRmL4zsDvcO/we/lu5neJi7E79Y8369ata75QO7jooou46KKLOmRfnVFLE41dn2mOKwENULS7iILiAlZ8tYJKXyVD0oZw54Q7+f7Q79M7uXe0Q+y0VNUu2T5BtPVcfksTzZ/atDdjOoldR3axeOtiFhcvpuRICSlxKcwYOoPc4bmMzhhtX6DNSExMZP/+/fTq1cuO1XFOVdm/f3+d+4RaqkWJRlVb14udMZ3AUd9RVu9YTX5xPut2rUNRJvabyLyx87jgpAtIik2KdohdRmZmJiUlJezduzfaoZgOkJiYSGZmZqvXt6vOzHFNVfl438cUFBfw9y//zmHvYQakDOCWMbeQMyyHzG6t//CcyOLi4hgyZEi0wzBdhCUac1zaV7mPpduWUlBcQPHBYhJjErngpAvIHZ7Lmf3OxCORDMVkjGkPlmjMccMb8LK2ZC0FxQW8U/IOPvUxuvdofnn2L7l48MV0i+8W7RCNOSFZojFd3hcHvqCguIDXt73Ot0e/JSMpg2tPu5bcYbkM7TE02uEZc8KzRGO6pENVh1j+5XLyi/P5ZP8nxHpimZI5hdzhuUweOJlYj/3XNqazsE+j6TL8AT/rdq2joLiAVTtWUR2oZmT6SO4+825mDJ1Bz8Se0Q7RGBOGJRrT6X1d9jUFWwtYsnUJ35R/Q/f47lw28jJyh+cyqucou4/DmE7OEo3plCq8Faz4agX5xfkU7S7CIx7OHnA2/5b9b0wdNNWGQDamC7FEYzoNVeVfe/5FQXEBb2x/gwpfBVndsrh9/O18f+j36ZvSN9ohGmNawRKNibrd5bt5bVtwCOSvyr4iOTaZiwZfRO7wXMb1GWdNY8Z0cZZoTFRU+6tZ/fVqCooLeL/0fQIaYELfCcw5Yw7TT5pOclxytEM0xrSTqCQaEekJLAIGA9uBK1X1QJhyfmCT83KHquY486cBjwAe4AhwvaoWO8uuBH4NKPCRqv7IzfdiIqeqbPl2CwXFBSz7chmHqg7RN7kvc86YQ+6wXAZ1HxTtEI0xLohWjWYBsEpV80RkgfP6njDlKlV1bJj5TwIzVXWLiMwD7geuF5ERwL3AZFU9ICJ93HoDJnIHjh5g6bal5Bfn8/mBz4n3xDMtaxq5w3OZ2H/iCTUEsjEnomglmpnAFGf6WWAN4RNNYxTo7kynAaXO9M3AEzW1I1Xd09ZATev4Aj7e3fkuBcUFrClZgy/g47Rep3H/xPu5eMjFNgSyMSeQaCWavqq6C0BVdzVR80gUkULAB+SpaoEzfw6wTEQqgTJgkjN/JICIvAvEAL9W1eVuvQnT0LZD22qHQN5XuY+eiT350Sk/Ind4LiPSR0Q7PGNMFLiWaERkJdAvzKL7WrCZLFUtFZGhwGoR2aSqW4E7gUtUdZ2I3AUsJJh8YoERBGtLmcA/ROR0VT0YJr65wFyArKysFoRk6jtcfZjl25dTUFzAxr0biZEYzs08l9zhuZyXeR5xHhsC2ZgTmWuJRlUvaGyZiOwWkf5ObaY/ELaJS1VLnedtIrIGGCciZcAYVa0Z7HsRUFNrKQE+UFUv8KWIfEYw8fwzzLafBp4GyM7Obts4pSeggAb45zf/pKC4gJVfreSo/yjD0oYxP3s+M4bOICMpI9ohGmM6iWg1nS0BrgPynOfF9QuISDpQoapVIpIBTAYeBg4AaSIyUlU/By4EtjirFQBXA88464wEtrn9Zk4kO4/sZEnxEhZvXczOIzvpFteNnGE55A7P5fSM0+2eF2NMA9FKNHnASyJyE7ADuAJARLKBW1R1DjAKeEpEAgQvY85T1c1OuZuBV51lB4Abne2+AUwXkc2AH7hLVfd34Ps6LlX6Kln51UoWFy9m3TfrEISJ/Sfys3E/Y1rWNBJjWz+WuDHm+Ceq1mqUnZ2thYWF0Q6jU1FVNu7bSEFxAcu/XM4R7xEyUzOZOXwmM4fNpH9q/2iHaIyJMhEpUtXs5spZzwCmjn2V+3hta7A7mG2HtpEUm8SFJ11I7vBcJvSdYEMgG2NazBKNwev38nbJ28EhkHe+g1/9jO09lgfOeYDpJ00nNT412iEaY7owSzQnsM++/YyC4gKWblvKgaoD9Enqw/WnXc/M4TMZkjYk2uEZY44TlmhOMIeqDrF021IKigvY8u0WYj2xTB00ldzhuZwz4BwbAtkY0+7sW+UE4A/4eX/X++R/kc9bX7+FN+DllJ6nsOCsBcwYMoMeiT2iHaIx5jhmieY49lXZVxQUB4dA3lOxhx4JPbjy5CvJHZ7LKT1PiXZ4xpgThCWa40y5t5w3t79JQXEB6/esxyMeJg+YzIKzFvDdzO8SHxMf7RCNMScYSzTHAVWlaHcR+cX5rPhqBZW+SgZ3H8wd4+/g+8O+T59kGy3BGBM9lmi6sG/Kv2Fx8WIWb13M14e/JiUuhUuGXELu8FzG9B5j3cEYYzoFSzRdTJW/itU7jg2BrChn9juTn4z5CdOyptkQyMaYTscSTRegqnyy/5PaIZAPVx+mf0p/fjzmx+QMy2FQNxsC2RjTeVmi6cT2V+7n9W2vU1BcQPHBYhJiEpiWNY1ZI2ZxVr+zrDsYY0yXYImmk/EGvLxT8g75xfn8o+Qf+NTH6IzR/GLSL7h4yMV0j+/e/EaMMaYTsUTTSRQfKA4OgbztNb49+i29Ensx+9TZ5A7PZViPYdEOzxhjWs0STRSVVZex/MvgEMib9m0iVmI5L/M8Zo2YxeSBk20IZGPMccESTQcLaIB1u9aRX5zP6h2rqfJXMSJ9BHdl38WMoTPoldQr2iEaY0y7skTTQb4+/DWLixezZOsSdpXvolt8N3KH5zJr+CxO7XWq3fNijDluWaJxUYW3gpU7VpL/RT6FuwsRhHMGnMPPJ/ycqVlTSYhJiHaIxhjjuqgkGhHpCSwCBgPbgStV9UCYcn5gk/Nyh6rmOPOnAY8AHuAIcL2qFovI74CpTvlkoI+qdmjXxKrKhr0bKCgu4I3tb1DuLWdQt0H8bNzPyBmWQ7+Ufh0ZjjHGRF20ajQLgFWqmiciC5zX94QpV6mqY8PMfxKYqapbRGQecD/BZHNnTQER+RkwzoXYw9pTsYclW5ewuHgx28u2kxSbxPSTpjNrxCzG9xlvTWPGmBNWtBLNTGCKM/0ssIbwiaYxCtTcUJIGlIYpczXwq9aFF5lqfzVrvl5DfnE+75W+R0ADjO8znhtPv5GLBl9k3cEYYwzRSzR9VXUXgKruEpHGuhdOFJFCwAfkqWqBM38OsExEKoEyYFLoSiJyEjAEWN1YACIyF5gLkJWV1ao38dTGp3h649P0Se7DTaffxMzhMzmp+0mt2pYxxhyvXEs0IrISCHdC4r4WbCZLVUtFZCiwWkQ2qepW4E7gElVdJyJ3AQsJJp8aVwGvqKq/sQ2r6tPA0wDZ2dnagphq/WDEDxjfZzyT+k8ixhPTmk0YY8xxz7VEo6oXNLZMRHaLSH+nNtMf2NPINkqd520isgYYJyJlwBhVXecUWwQsr7fqVcCtbX0PzRmYOpCBqQPd3o0xxnRp0eqVcQlwnTN9HbC4fgERSReRBGc6A5gMbAYOAGkiMtIpeiGwJWS9k4F04H3XojfGGBOxaJ2jyQNeEpGbgB3AFQAikg3coqpzgFHAUyISIJgQ81R1s1PuZuBVZ9kB4MaQbV8NvKiqrWoOM8YY077Evo+D52gKCwujHYYxxnQpIlKkqtnNlbMBTYwxxrjKEo0xxhhXWaIxxhjjKks0xhhjXGWJxhhjjKss0RhjjHGVJRpjjDGuskRjjDHGVZZojDHGuMoSjTHGGFdZojHGGOMqSzTGGGNcZYnGGGOMqyzRGGOMcZUlGmOMMa6yRGOMMcZVlmiMMca4KiqJRkR6isgKEfnCeU5vpJxfRDY4jyUh86eJyHpn/jsiMtyZnyUib4nIv0Rko4hc0lHvyRhjTHjRqtEsAFap6ghglfM6nEpVHes8ckLmPwlco6pjgReA+5359wMvqeo44Crgj+6Eb4wxJlLRSjQzgWed6WeB3Baur0B3ZzoNKG1mvjHGmCiJjdJ++6rqLgBV3SUifRoplygihYAPyFPVAmf+HGCZiFQCZcAkZ/6vgTdF5GdACnCBW28AYHNpGRtLDhIX4yEu1kN8jIf4WAm+dh7BeR7iYoLzg9Mhr2M8eDziZpjGmC4uEFCq/QG8/gDVvgBev1LtC1Bd+/rYsurQMn4/Xp/WKVfzXOUP4PUpM0b3Y8JJPV2N37VEIyIrgX5hFt3Xgs1kqWqpiAwFVovIJlXdCtwJXKKq60TkLmAhweRzNfCMqv7/InI28JyInK6qgTDxzQXmAmRlZbXszTnWfrGXvL9/2qp1Q8V6pDb5HEtEx5JSfExI8ooNvg4tF1qmdp2Q5FY34TnzncQYut/4kH3ExUjt6/hYD7EeQcQSojk+qdZ8kWudL+S6X+4Bqnx1yxybF6i3noaZF5oUGiaK0GX1t+kLaLu+XxGC3wkxHk7p1831RCOq7fsGItqpyGfAFKc20x9Yo6onN7POM8DrwNvAB6o6zJmfBSxX1VNF5BPgYlX92lm2DZikqnua2nZ2drYWFha2+H2UV/k4VOkN+TWhx6ZDflV4/XV/idT/T+wN8x+8dl5oGZ86v0LqrVfvV43X787fND4kSYWrrdXMi4uVOkmrdj1nXkJokgwtG7K9cEmvThJ21q2/zRirHXZKqlrn/379z0hEv859/gb/3+tuK/z2q0M+P/XnhX7W2lt8yP/90B+A9X/0xcfG1PnxGF+nhaTm/39M7Wel/o/CmpaU+JiYsPuqLROyvZh2+uEoIkWqmt1cuWg1nS0BrgPynOfF9Qs4V6JVqGqViGQAk4GHgQNAmoiMVNXPgQuBLc5qO4BpwDMiMgpIBPa69SZSEmJJSYjWIWxc6Ie6blLThoks5EPpDfOBPJY4ne2F+WDXKeMLcNQb4PBRX539NEyuir+df6UBeIQGH9aahBRag4sL84GtX4urU5sMed2gNhm6/dgm9lOTlD3t31yqqvgCWvv3q/L7w/86r/clW13v13n4X9mNNL2E+3/UxC/39lb79wo55vEhf/OaeakJsQ3/rmFaBuongfgwP3JqnhOaKWMtAHVF61syD3hJRG4imByuABCRbOAWVZ0DjAKeEpEAwYsW8lR1s1PuZuBVZ9kB4EZnu/8G/ElE7iR4YcD1Go0qW5SJSPAXTmznvk3KH2ikttdEwgtNaI3WHGvXDbZP102kWvsleaTKV7uf0DL1v1zdULe5NPiLNi70S89JUrExgs/f8Jd4zbHx+py2dn+A9v6fXhNj3S/Xhk20SXExpCXF1b6Xpr+cw22zbiJOqLdeY1/+9kXedUSl6ayzaW3TmTn+qaqTEBtJeqFJql7NsX5NokFTaMivfW9oDSBkXZ9f69bIYj0k1Gl2DDap1Mxr2GxSt0mlQRNk/SaakC93u0jFNKezN50Z0yWICLExQmwMJBET7XCM6ZI6d9uKMcaYLs8SjTHGGFdZojHGGOMqSzTGGGNcZYnGGGOMqyzRGGOMcZUlGmOMMa6yRGOMMcZV1jMAICJ7ga9auXoGsK8dw2kvFlfLWFwt11ljs7hapi1xnaSqvZsrZImmjUSkMJIuGDqaxdUyFlfLddbYLK6W6Yi4rOnMGGOMqyzRGGOMcZUlmrZ7OtoBNMLiahmLq+U6a2wWV8u4HpedozHGGOMqq9EYY4xxlSWaCIjIn0Vkj4h83MhyEZHHRKRYRDaKyPhOEtcUETkkIhucxy87KK5BIvKWiGwRkU9E5PYwZTr8mEUYV4cfMxFJFJEPReQjJ64HwpRJEJFFzvFaJyKDO0lc14vI3pDjNcftuEL2HSMi/xKR18Ms6/DjFWFc0Txe20Vkk7PfBiM9uvqZVFV7NPMAzgPGAx83svwS4O+AAJOAdZ0krinA61E4Xv2B8c50N+Bz4NRoH7MI4+rwY+Ycg1RnOg5YB0yqV2Ye8J/O9FXAok4S1/XAHzr6/5iz758DL4T7e0XjeEUYVzSP13Ygo4nlrn0mrUYTAVVdC3zbRJGZwF816AOgh4j07wRxRYWq7lLV9c70YWALMLBesQ4/ZhHG1eGcY3DEeRnnPOqfPJ0JPOtMvwJMExFXx1qOMK6oEJFMYAbwX40U6fDjFWFcnZlrn0lLNO1jIPB1yOsSOsEXmONsp+nj7yJyWkfv3GmyGEfw13CoqB6zJuKCKBwzp7llA7AHWKGqjR4vVfUBh4BenSAugMucppZXRGSQ2zE5HgXuBgKNLI/K8YogLojO8YLgj4Q3RaRIROaGWe7aZ9ISTfsI90upM/zyW0+wi4gxwONAQUfuXERSgVeBO1S1rP7iMKt0yDFrJq6oHDNV9avqWCATOEtETq9XJCrHK4K4XgMGq+poYCXHahGuEZFLgT2qWtRUsTDzXD1eEcbV4ccrxGRVHQ98D7hVRM6rt9y1Y2aJpn2UAKG/TDKB0ijFUktVy2qaPlR1GRAnIhkdsW8RiSP4Zf4/qvp/wxSJyjFrLq5oHjNnnweBNcDF9RbVHi8RiQXS6MBm08biUtX9qlrlvPwTMKEDwpkM5IjIduBF4HwReb5emWgcr2bjitLxqtl3qfO8B8gHzqpXxLXPpCWa9rEE+F/OVRuTgEOquivaQYlIv5p2aRE5i+Dfe38H7FeA/wa2qOrCRop1+DGLJK5oHDMR6S0iPZzpJOAC4NN6xZYA1znTlwOr1TmDG8246rXh5xA87+UqVb1XVTNVdTDBE/2rVXV2vWIdfrwiiSsax8vZb4qIdKuZBqYD9a9Wde0zGdseGzneicjfCF6NlCEiJcCvCJ4YRVX/E1hG8IqNYqACuKGTxHU58BMR8QGVwFVuf9gck4FrgU1O+z7A/wayQmKLxjGLJK5oHLP+wLMiEkMwsb2kqq+LyL8Dhaq6hGCCfE5Eign+Mr/K5Zgijes2EckBfE5c13dAXGF1guMVSVzROl59gXznN1Qs8IKqLheRW8D9z6T1DGCMMcZV1nRmjDHGVZZojDHGuMoSjTHGGFdZojHGGOMqSzTGGGNcZYnGGGOMqyzRGNMIEckRkQXtuL01IpIdZn62iDzmTF8vIn9oZP0j4ea3Q1zLam7MbKJMY7GPFZFL3IjLHD/shk1jGuHcYLekA/ZTCDQYH6SjqGpbEsVYIJvgzX7GhGU1GnNCEpHBIvKpiPyXiHwsIv8jIheIyLsi8oWInBVauxCRZyQ4KNR7IrJNRC5vZvt3S3CQqY9EJC9k0RUSHEzscxE51yk7RcIPkjVERN4XkX+KyG+a2d8fnTvOEZF8EfmzM32TiDzoTM929r1BRJ5y7vivGRArw5n+hXNcVojI30RkfmOxi0g88O/AD51t/rDpo25OVJZozIlsOPB7YDRwCvAj4DvAfIJd09TX31l+KZAXZjkAIvI9IBeY6PQC/XDI4lhVPQu4g2CXQU35PfCkqp4JfNNM2bXAuc70QOBUZ/o7wD9EZBTwQ4I9+I4F/MA19eLOBi4jOHzCDwjWVELViV1Vq4FfEhxUbKyqLmomRnOCskRjTmRfquomVQ0AnwCrnH7NNgGDw5QvUNWAqm4m2HdUYy4A/qKqFQCqGtprcE2P0UWN7CPUZOBvzvRzzZT9B3CuiJwKbAZ2Ox04ng28B0wj2FPwP51+3qYBQ+tt4zvAYlWtdAaGe63e8pbEbkwtO0djTmRVIdOBkNcBwn82Qss3NVqj0Pg4HjXb8Deyj/oi6oxQVXeKSDrBbvzXAj2BK4EjqnrY6ZH6WVW9t5m4m9LS2I0BrEZjjBveBG4UkWQAEenZyu28y7Feh69pqqDjfYLNWmsJ1nDmO88Aq4DLRaRPTUwiclK99d8Bvi8iiRIcHG5GBPs8DHSLoJw5gVmiMaadqepyglerFTrNVPObWaUxtxMcCfGfBAfuas4/CJ5HKSY4UmhPZx5Oc9/9BIfy3QisIHjOKTTufzpxf0SwmayQ4BDITXkLONUuBjBNsWECjDG1RCRVVY84tbG1wFxVXR/tuEzXZu2sxphQTzsXFCQSPKdjSca0mdVojGklETmDhleDVanqxONpn8a0lSUaY4wxrrKLAYwxxrjKEo0xxhhXWaIxxhjjKks0xhhjXGWJxhhjjKv+H19grHoVErUYAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "test_means = gsearch2_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch2_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch2_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch2_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch2_1.cv_results_).to_csv('my_preds_maxdepth_min_child_weights_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(min_child_weight), len(max_depth))\n",
    "train_scores = np.array(train_means).reshape(len(min_child_weight), len(max_depth))\n",
    "\n",
    "for i, value in enumerate(max_depth):\n",
    "    pyplot.plot(min_child_weight, test_scores[i], label= 'test_max_depth:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'min_child_weight' )                                                                                                      \n",
    "pyplot.ylabel( '- Log Loss' )\n",
    "pyplot.savefig( 'max_depth_vs_min_child_weght1.png' )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 139,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[2, 3, 4]"
      ]
     },
     "execution_count": 139,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "min_child_weight"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# max_depth & min_child_weight精调"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 119,
   "metadata": {},
   "outputs": [],
   "source": [
    "max_depth = [5,6,7]\n",
    "min_child_weight = [2,3,4]\n",
    "param_test2_2 = dict(max_depth=max_depth, min_child_weight=min_child_weight)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 120,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.58357, std: 0.00338, params: {'max_depth': 5, 'min_child_weight': 2},\n",
       "  mean: -0.58365, std: 0.00353, params: {'max_depth': 5, 'min_child_weight': 3},\n",
       "  mean: -0.58369, std: 0.00383, params: {'max_depth': 5, 'min_child_weight': 4},\n",
       "  mean: -0.58093, std: 0.00400, params: {'max_depth': 6, 'min_child_weight': 2},\n",
       "  mean: -0.58177, std: 0.00398, params: {'max_depth': 6, 'min_child_weight': 3},\n",
       "  mean: -0.58074, std: 0.00422, params: {'max_depth': 6, 'min_child_weight': 4},\n",
       "  mean: -0.58195, std: 0.00414, params: {'max_depth': 7, 'min_child_weight': 2},\n",
       "  mean: -0.58186, std: 0.00302, params: {'max_depth': 7, 'min_child_weight': 3},\n",
       "  mean: -0.58163, std: 0.00395, params: {'max_depth': 7, 'min_child_weight': 4}],\n",
       " {'max_depth': 6, 'min_child_weight': 4},\n",
       " -0.5807366800066354)"
      ]
     },
     "execution_count": 120,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_2 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=300,  #第一轮参数调整得到的n_estimators最优值\n",
    "        gamma=0,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softmax',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch2_2 = GridSearchCV(xgb2_2, param_grid = param_test2_2, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch2_2.fit(X_train , y_train)\n",
    "\n",
    "gsearch2_2.grid_scores_, gsearch2_2.best_params_,     gsearch2_2.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 132,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "test_means = gsearch2_2.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch2_2.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch2_2.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch2_2.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch2_2.cv_results_).to_csv('my_preds_maxdepth_min_child_weights_2.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(min_child_weight), len(max_depth))\n",
    "train_scores = np.array(train_means).reshape(len(min_child_weight), len(max_depth))\n",
    "\n",
    "for i, value in enumerate(max_depth):\n",
    "    pyplot.plot(min_child_weight, test_scores[i], label= 'test_max_depth:'   + str(value))\n",
    "    \n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, test_scores[i], label= 'test_min_child_weight:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'min_child_weight' )                                                                                                      \n",
    "pyplot.ylabel( '- Log Loss' )\n",
    "pyplot.savefig( 'max_depth_vs_min_child_weght2.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "调解结果：\n",
    "max_depth=6 & min_child_weight=4"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 再次调分类器数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 142,
   "metadata": {},
   "outputs": [],
   "source": [
    "#params = {\"objective\": \"multi:softprob\", \"eval_metric\":\"mlogloss\", \"num_class\": 9}\n",
    "xgb3 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=600,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=6,\n",
    "        min_child_weight=4,\n",
    "        gamma=0,\n",
    "        subsample=1,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=6)\n",
    "\n",
    "modelfit_1(xgb3, X_train, y_train, cv_folds = kfold)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 145,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\ipykernel_launcher.py:1: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "最佳参数n_estimators%d 279\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1000x1000 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "print('最佳参数n_estimators%d',cvresult.shape[0])\n",
    "cvresult = cvresult.iloc[50:]\n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(50,cvresult.shape[0]+50)\n",
    "        \n",
    "fig = pyplot.figure(figsize=(10, 10), dpi=100)\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators_detail.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 调整树的参数：subsample 和 colsample_bytree"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 158,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'colsample_bytree': [0.6, 0.8, 1.0], 'subsample': [0.8, 0.9, 1.0]}"
      ]
     },
     "execution_count": 158,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "subsample = [i/10.0 for i in range(8,11)]\n",
    "colsample_bytree = [i/5.0 for i in range(3,6)]\n",
    "param_test4 = dict(subsample=subsample, colsample_bytree=colsample_bytree)\n",
    "param_test4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 159,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.58053, std: 0.00419, params: {'subsample': 0.8, 'colsample_bytree': 0.6},\n",
       "  mean: -0.58046, std: 0.00383, params: {'subsample': 0.9, 'colsample_bytree': 0.6},\n",
       "  mean: -0.58102, std: 0.00381, params: {'subsample': 1.0, 'colsample_bytree': 0.6},\n",
       "  mean: -0.58083, std: 0.00337, params: {'subsample': 0.8, 'colsample_bytree': 0.8},\n",
       "  mean: -0.58019, std: 0.00381, params: {'subsample': 0.9, 'colsample_bytree': 0.8},\n",
       "  mean: -0.58149, std: 0.00343, params: {'subsample': 1.0, 'colsample_bytree': 0.8},\n",
       "  mean: -0.58088, std: 0.00295, params: {'subsample': 0.8, 'colsample_bytree': 1.0},\n",
       "  mean: -0.58055, std: 0.00363, params: {'subsample': 0.9, 'colsample_bytree': 1.0},\n",
       "  mean: -0.58142, std: 0.00378, params: {'subsample': 1.0, 'colsample_bytree': 1.0}],\n",
       " {'colsample_bytree': 0.8, 'subsample': 0.9},\n",
       " -0.5801880964911712)"
      ]
     },
     "execution_count": 159,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb4 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=279,  #第二轮参数调整得到的n_estimators最优值\n",
    "        max_depth=6,\n",
    "        min_child_weight=4,\n",
    "        gamma=0,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=6)\n",
    "\n",
    "\n",
    "gsearch4 = GridSearchCV(xgb4, param_grid = param_test4, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch4.fit(X_train , y_train)\n",
    "\n",
    "gsearch4.grid_scores_, gsearch4.best_params_,     gsearch4.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 161,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.580188 using {'subsample': 0.9, 'colsample_bytree': 0.8}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZgAAAEKCAYAAAAvlUMdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3Xdc1dX/wPHXYShOHDgQBNx7g2IuEHCPsrKyNDXNcqZpama2zJGZKzPL0p9ZOcrSnAzBvbei4mA5AEVR9rjn98fnytcBCMLlXuA8Hw8fce/9fM7nfW/K+37OeB8hpURRFEVR8pqZsQNQFEVRCieVYBRFURSDUAlGURRFMQiVYBRFURSDUAlGURRFMQiVYBRFURSDUAlGURRFMQiVYBRFURSDUAlGURRFMQgLYwdgTDY2NtLJycnYYSiKohQox44duy2lrPSs44p0gnFycuLo0aPGDkNRFKVAEUKEZOc41UWmKIqiGIRKMIqiKIpBqASjKIqiGESRHoPJSEpKCuHh4SQmJho7FEVJZ2Vlhb29PZaWlsYORVGyTSWYJ4SHh1OmTBmcnJwQQhg7HEVBSsmdO3cIDw+nRo0axg5HUbJNdZE9ITExkYoVK6rkopgMIQQVK1ZUd9VKgaMSTAZUclFMjfo7qRREKsEoiqIUJTod7JgGd7O1lCVXVIJRFEUpSnZ/AweWwFV/g19KJRgTc+/ePZYuXfpc5y5YsID4+Pg8i2XlypWMHj06z9rLLn9/f3r16pXj83Iab3BwML///nuOr5Nd0dHReHl5UadOHby8vLh7926Gx4WGhtKlSxcaNGhAw4YNCQ4ONlhMShF32Rf8Z0HT16HlIINfTiUYE2NKCaawyyrBpKam5rr92bNn4+HhQVBQEB4eHsyePTvD4wYNGsSkSZMIDAzk8OHDVK5cOdfXVpSnxITDX8OgcgPo9R3kw7iemqachc83n+P8jft52mbDamWZ0btRpq9PmTKFK1eu0Lx5c7y8vKhcuTLr1q0jKSmJl156ic8//5y4uDj69+9PeHg4aWlpTJ8+nYiICG7cuIG7uzs2Njbs2rUrw/a3b9/Oxx9/TFpaGjY2Nvj6+hIdHc3QoUO5evUqJUuWZPny5TRt2vSx89avX8/nn3+Oubk51tbW7N69m+DgYAYOHEhcXBwAS5Ys4YUXXsDf358ZM2ZQpUoVTp48Sb9+/WjSpAkLFy4kISGBf/75h1q1ajF48GCsrKw4d+4cERERzJ8//6k7l7i4OMaMGcOZM2dITU3ls88+o2/fvpl+fmFhYXTr1o1r164xYMAAZsyYwfTp07GxsWHcuHEATJs2jSpVqvD7778TGBhI8+bNefvttylfvjxbtmwhMTGRuLg4/Pz8+Oabb576/AF+++03Fi1aRHJyMm3atGHp0qWYm5s/Fsu///6Lv78/AG+//TZubm7MmTPnsWPOnz9PamoqXl5eAJQuXTrT96Yozy01Gda9DWkp0H81FCuZL5dVCcbEzJ49m7Nnz3Ly5El27tzJhg0bOHz4MFJK+vTpw+7du4mKiqJatWps2bIFgJiYGKytrZk/fz67du3CxsYmw7ajoqIYPnw4u3fvpkaNGkRHRwMwY8YMWrRowT///IOfnx+DBg3i5MmTj537xRdfsGPHDuzs7Lh37x4AlStXxtvbGysrK4KCgnjjjTfSi4eeOnWKwMBAKlSoQM2aNRk2bBiHDx9m4cKFLF68mAULFgDaXURAQABXrlzB3d2dy5cvP3bdmTNn0rlzZ3755Rfu3btH69at8fT0pFSpUhm+x8OHD3P27FlKliyJi4sLPXv25J133qFfv36MGzcOnU7Hn3/+yeHDh2natCnz5s3jv//+A7QutgMHDnD69GkqVKjAzp07CQoKeurzr1SpEmvXrmXfvn1YWloycuRI1qxZw6BBgxg2bBjvvfcezs7OREREYGtrC4CtrS2RkZFPxXvp0iXKlStHv379uHbtGp6ensyePfupZKUoubLzE7h+FF5dBTa18+2yKsFkIas7jfywc+dOdu7cSYsWLQCIjY0lKCiIDh06MHHiRCZPnkyvXr3o0KFDtto7ePAgHTt2TF+sV6FCBQD27t3LX3/9BUDnzp25c+cOMTExj53brl07Bg8eTP/+/enXrx+gVT0YPXo0J0+exNzcnEuXLqUf7+Likv7LtVatWnTp0gWAJk2aPHZ31b9/f8zMzKhTpw41a9bkwoULT30GmzZtYt68eYC2Tik0NJQGDRpk+B69vLyoWLEiAP369WPv3r188MEHVKxYkRMnThAREUGLFi3Sj8no/IefS2af/+nTpzl27BguLi4AJCQkpHdr/fzzzxm2m5nU1FT27NnDiRMncHBw4LXXXmPlypW88847OWpHUTJ1ZgMc/hFcR0GjF/P10irBmDApJVOnTmXEiBFPvXbs2DG2bt3K1KlT6dKlC59++mm22stoPYWU8qnnnjxu2bJlHDp0iC1bttC8eXNOnjzJ4sWLqVKlCqdOnUKn02FlZZV+fPHixdN/NjMzS39sZmb22PjGk9d58rGUkr/++ot69eo98/1l1d6wYcNYuXIlt27dYujQoZme/+idUWaf/+LFi3n77beZNWtWlrFUqVKFmzdvYmtry82bNzMcW7G3t6dFixbUrFkTgBdffJGDBw+qBKPkjaiLsGksVHcFr8/z/fJqkN/ElClThgcPHgDQtWtXfvnlF2JjYwG4fv06kZGR3Lhxg5IlS/LWW28xceJEjh8//tS5GWnbti0BAQFcu3YNIL2LrGPHjqxZswbQZnDZ2NhQtmzZx869cuUKbdq04YsvvsDGxoawsDBiYmKwtbXFzMyM1atXk5aWluP3u379enQ6HVeuXOHq1atPJZKuXbuyePHi9CR44sSJLNvz9vYmOjo6faynXbt2ALz00kts376dI0eO0LVrV+DZn1dmn7+HhwcbNmxI7/KKjo4mJOTpNQV9+vRh1apVAKxatSrDsSMXFxfu3r1LVFQUAH5+fjRs2DDL96go2ZIUC2sHauMtr/4K5vlfx07dwZiYihUr0q5dOxo3bkz37t0ZMGAAbdu2BbQB4N9++43Lly8zadIkzMzMsLS05IcffgDg3XffpXv37tja2mY4yF+pUiWWL19Ov3790Ol06WMon332GUOGDKFp06aULFky/ZfioyZNmkRQUBBSSjw8PGjWrBkjR47k5ZdfZv369bi7u2c6LpKVevXq0alTJyIiIli2bNljd0EA06dP54MPPqBp06ZIKXFyckofM8lI+/btGThwIJcvX2bAgAE4OzsDUKxYMdzd3SlXrlz6+EbTpk2xsLCgWbNmDB48mPLlyz/WVpcuXQgMDHzq82/YsCFfffUVXbp0QafTYWlpyffff4+jo+NjYzBTpkyhf//+rFixAgcHB9avXw/A0aNHWbZsGT///DPm5ubMmzcPDw8PpJS0atWK4cOH5/hzVJTHSAmbx8KdIBj4D5StZpQwREbdI0WFs7OzfHJHy8DAwEz795W8NXjwYHr16sUrr7xi8GvpdDpatmzJ+vXrqVOnjsGvZwjq76aSbYeWw7ZJ4PEpdPjwqZdTdClYmj3/HY0Q4piU0vlZxxm0i0wI0U0IcVEIcVkIMSWD1wcLIaKEECf1f4Y98tpcIcQ5IUSgEGKR0HemCyFmCiHChBCxmVzzFSGEFEI8880rRcP58+epXbs2Hh4eBTa5KEq2hR2BHR9D3W7QbvxTL4fcD+HlTS+zO3y3wUMxWBeZEMIc+B7wAsKBI0KITVLK808culZKOfqJc18A2gEPF2PsBToB/sBmYAkQlME1ywBjgUN5904KpjZt2pCUlPTYc6tXr6ZJkyZGiuhpK1eufK7zduzYweTJkx97rkaNGmzcuDHD4xs2bMjVq1ef61qKUqDE3YH1g7UusZeWgdnj9xAnI08yxm8MAkHZYmUzbiMPGXIMpjVwWUp5FUAI8SfQF3gywWREAlZAMUAAlkAEgJTyoL69jM77EpgLTMxl7AXeoUOFN8d27do1faBeURQ9XRr8PQziouCdnVDi8THFHcE7+HjPx1QtVZUfPH/AoayDwUMyZBeZHRD2yONw/XNPelkIcVoIsUEIUR1ASnkA2AXc1P/ZIaUMzOpiQogWQHUpZeYjwIqiKIVVwFy44gc95kK15ulPSyn59eyvTAyYSCObRvzW47d8SS5g2AST0S3GkzMKNgNOUsqmgA+wCkAIURtoANijJaXOQoiOmV5ICDPgO+Dp0aynj31XCHFUCHH04dRQRVGUAi3IBwLmQLMB0PLt9KdTdanMPDST+cfm08WxCz91+YnyVuWzaChvGTLBhAPVH3lsD9x49AAp5R0p5cOBgp+AVvqfXwIOSiljpZSxwDbANYtrlQEaA/5CiGD9sZsyGuiXUi6XUjpLKZ0rVar0HG9LURTFhNwL07rGqjSCnt+mF7GMT4ln3K5xrL24liGNh/BNp28obl78GY3lLUMmmCNAHSFEDSFEMeB1YNOjBwghbB952Ad42A0WCnQSQlgIISzRBvgz7SKTUsZIKW2klE5SSifgINBHSnk0s3MURVEKvNQkWP+2Nv7S///Si1hGxkcyePtg9l7fy3TX6UxoNQEzkf/r6g12RSllKjAa2IGWHNZJKc8JIb4QQvTRHzZWPxX5FNrsr8H65zcAV4AzwCnglJRyM6RPXw4HSgohwoUQnxnqPRiDKZXrV/vB5E5294P56KOPaNSoEQ0aNGDs2LEZlu5RlAztmAbXj0Hf76FiLQCC7gbx5tY3Cb4fzOLOi+lfr7/RwjNoSpNSbpVS1pVS1pJSztQ/96mUcpP+56lSykZSymZSSncp5QX982lSyhFSygZSyoZSygmPtPmRlNJeSmmm/+9nGVzXraDevZhSginsTGE/mP3797Nv3z5Onz7N2bNnOXLkCAEBAbm+tlIEnF4PR36CtqOhofad/eDNgwzaNog0XRoru62ko32mQ9f5QpWKycq2KXDrTN62WbUJdM944ylQ+8EUtf1ghBAkJiaSnJyMlJKUlBSqVKmS6ftTFAAiA7VSMA5twfMzAP69/C+f7f8MJ2snlnosxba0bZZN5AeVYEyM2g+maO0H07ZtW9zd3bG1tUVKyejRo1U5GCVrSQ/0RSxLwyu/Is0s+OHkUn449QNtbNvwndt3lClWxthRAirBZC2LO438oPaDKfz7wVy+fJnAwEDCw8PTr7979246djRu14ZioqSETWMg+goM2kRKKRs+2/cJm65som+tvsxoOwNLI1RNzoxKMCZM7QdT+PeD2bhxI66urulbJXfv3j39i4CiPOXQj3BuI3h+xn27ZkzweZ9Dtw4xqvkoRjQdkVmFE6NR+8GYGLUfTNHaD8bBwYGAgABSU1NJSUkhICBAdZEpGQs7DDunQb0e3GjWn0FbB3Es8hhft/+a95q9Z3LJBdQdjMlR+8EUrf1gXnnlFfz8/GjSpAlCCLp160bv3r1z/DkqhVzcba2IpbU95zp+wOhtb5GUmsQyz2W0sW1j7OgypfaDUfvBGI3aDyZn1N/NIkqXBr/1g5ADBPSdy6QzSylXvBxLPZZSu3xto4RkEvvBKIopUPvBKAWa/2y46s+frm8y9uR31LCuwe89fzdacskJ1UVWSKn9YP5H7QejFFhB3uh2z+W7ei+w8oYPnew7MbfjXEpaljR2ZNmiEkwhpfaDUZQC7l4oiX8P5+PqNfFODuf1eq8zpfUUzM3Mn32uiVAJRlEUxdSkJhG97i3GVijBaYs0JjpPZFDDQSY5UywrKsEoiqKYmJAtYxlpFklEsRJ822kuXo5exg7puagEoyiKYkJO7JvH2Dt7EMVL8XPXFTSv3PzZJ5koNYvMxJhSNWVVrj931q9fT6NGjTAzM+PJ6fCP2r59O/Xq1aN27doZVlxWio7tJ1cwLGgl1mbF+a33+gKdXEAlGJNjSgmmsDN0uf7GjRvz999/Z1n2JS0tjVGjRrFt2zbOnz/PH3/8wfnz53N9baVgkVLyy4kfmHRqAY1SJKt7/YlDuZrGDivXVIIxMY+W6580aRLffPMNLi4uNG3alBkzZgBaCfuePXvSrFkzGjduzNq1a1m0aFF6uX53d/dM29++fTstW7akWbNmeHh4AFqpkxdffJGmTZvi6urK6dOnnzpv/fr1NG7cmGbNmqX/wgwODqZDhw60bNmSli1bsn//fkC7A+nUqRP9+/enbt26TJkyhTVr1tC6dWuaNGnClStXAG2h5XvvvUeHDh2oW7duhiv04+LiGDp0KC4uLrRo0YJ///03y8/vYbn+evXqpZfWnz59OgsXLkw/Ztq0aSxatIgpU6awZ88emjdvznfffcfKlSt59dVX6d27d3pxzow+f9DK9bdu3ZrmzZszYsSIDMvkNGjQ4Jk11A4fPkzt2rWpWbMmxYoV4/XXX3/me1QKl1RdKl8d/JLvTi+la1w8P3l8T3mb7NXeM3VqDCYLcw7P4UL0hWcfmAP1K9RncuvJmb6uyvUXnnL92XH9+nWqV6+e/tje3r5QTzFXHhefEs/EgInsub6HIffu80Gr8ZjVdDN2WHlGJRgTpsr1F/5y/dmpZK0UTpHxkYz2Hc3F6AtMv3OP/tU6Qrtxxg4rT6kEk4Ws7jTygyrXX7DL9WeHvb09YWFh6Y/Dw8OpVq1arttVTFvQ3SBG+o4kJvEei2NS6GheEfp+D4Xsy4UagzExqlx/4SnXnx0uLi4EBQVx7do1kpOT+fPPP+nTp89ztaUUDAdvHmTQtkGk6dJYmVaBjvej4bXVUKKcsUPLc+oOxsSocv2Fp1z/xo0bGTNmDFFRUfTs2ZPmzZuzY8cObty4wbBhw9i6dSsWFhYsWbKErl27kpaWxtChQ2nUqFGOP0elYPjn8j98vv9znKydWGpVD9vzP2h3LlVNp0ZgXlLl+lW5fqNR5fpzRv3dLLiklCw9tZRlp5bhauvKfPuelFn3NrQYCH2XGDu8HDOJcv1CiG5CiItCiMtCiCkZvD5YCBElhDip/zPskdfmCiHOCSEChRCLhL4zXQgxUwgRJoSIfaKtCUKI80KI00IIXyGEoyHfm1JwqHL9ijGlpKXwyb5PWHZqGX1r9WVpq8mU2TROu2vp8Y2xwzMog3WRCSHMge8BLyAcOCKE2CSlfHIV2Vop5egnzn0BaAc01T+1F+gE+AObgSVA0BPtnACcpZTxQoj3gbnAa3n3jgoWVa7/f1S5fsVY7iffZ/yu8Ry+dZhRzUcxosHbiF+7gZTQfzVYljB2iAZlyDGY1sBlKeVVACHEn0BfIDvLlCVgBRQDBGAJRABIKQ/q23v8BCkfHXQ4CLyVu/ALtsK8lkKV61cKghuxNxjpM5KQByF83f5retfqDZs/gJsn4fU/oEINY4docIbsIrMDwh55HK5/7kkv67u1NgghqgNIKQ8Au4Cb+j87pJSBObj2O8C2jF4QQrwrhDgqhDgaFRWV4clFeVxKMU3q72TBcu72Od7c+iaR8ZH86PmjllxO/gHHfoV2H0D9HsYOMV8YMsFkNKH7yX8lmwEnKWVTwAdYBSCEqA00AOzRklJnIUTmBZ0evagQbwHOQIadm1LK5VJKZymlc6VKlZ563crKijt37qh/0IrJkFJy586dp2bYKaYpICyAITuGUMysGKt7rKa1bWuIOAf/jQenDtB5urFDzDeG7CILB6o/8tgeuPHoAVLKO488/AmYo//5JeCglDIWQAixDXAFdmd1QSGEJzAN6CSlTMrq2MzY29sTHh5OZnc3imIMVlZW2NvbGzsM5Rn+vPAnsw7Pon6F+nzv8T02JWwgMQbWDgQra3h5BZgXndUhhnynR4A6QogawHXgdWDAowcIIWyllDf1D/sAD7vBQoHhQohZaHdCnYAFWV1MCNEC+BHoJqWMfN6gLS0t00upKIqiZIdO6ph/dD6rzq/Czd6NOR3nUNKypDaY/+8ouBsMg/+DMlWMHWq+MlgXmZQyFRgN7EBLHOuklOeEEF8IIR4uVR6rn4p8ChgLDNY/vwG4ApwBTgGnpJSbIX36cjhQUggRLoT4TH/ON0BpYL1+yvMmQ703RVGUhxJTE5kYMJFV51fxer3XWeC+QEsuAAe+h8DN4PU5OL5g3ECNQC20zGIjKEVRlKxEJ0Yz1m8sp6NO86HzhwxqOOh/M1xDDsDKntqAfv/VharOWHYXWhadzkBFUZQ8FHI/hPd93icyPpJv3b7Fy9Hrfy/GRsL6wVDesVAWscwulWAURVFy6ETkCcb6jUUg+LnLz49vbZyWChuGaoP7b/2lDe4XUaqasqIoSg5sD97OsB3DsC5uzW89fns8uQDsmgnBe6DXfKja2DhBmgh1B6MoipINUkp+Pfcr3x37jhaVW7DIfRHlrJ4osX9xG+ydDy3fhuYDMm6oCFEJRlEU5RlSdanMOjSLdZfW0dWpKzPbz6S4efHHD4q+BhtHgG0z6D7XOIGaGJVgFEVRshCfEs/EgInsub6HoY2HMq7lOMzEE6MLKYmwbpD2c///A0tVdQFUglEURclUZHwko31Hc/HuRaa7Tqd/vf4ZH7htEtw6DW+shfJO+RqjKVMJRlEUJQNBd4MY6TuSmKQYFndeTEf7TMohnlgDx/8P2k+Aet3yN0gTpxKMoijKEw7cOMAE/wmUsCjBqm6raFAxk51Eb52BLRO0Ipbu0/I3yAJATVNWFEV5xD+X/2Gkz0iqlqrKmh5rMk8uiTHauEuJ8vDKL0WqiGV2qU9EURQFbRry0lNLWXZqGa62rsx3m0+ZYmUyOxj+GQn3QmHwFihdOX+DLSBUglEUpchLSUthxv4ZbL66mb61+jLjhRlYmllmfsL+xXDhP+j6NTi45l+gBYxKMIqiFGkxSTFM8J/A4VuHGdV8FCOajnhqS/bHBO8Dn8+gYV9wHZlvcRZEKsEoilJkXY+9zkifkYQ+COXr9l9rWxtn5UEEbBgCFWpAnyVFtohldqkEoyhKkXTu9jlG+Y4iOS2ZHz1/1LY2zkp6Ecv7MHAjWJXNn0ALMDWLTFGUIsc/zJ8hO4ZQ3Lw4q3usfnZyAfD7EkL2Qu8FUKWR4YMsBFSCURSlSPnjwh+M2zWOGtY1WNNzDbXK1Xr2SRe2wr4F0GoINHvd8EEWEqqLTFGUIkEndcw/Op9V51fhZu/GnI5z/re1cVair8LG98C2OXSbbfhACxGVYBRFKfQSUxP5eO/HeId480b9N5jsMhlzM/Nnn5iSAGsHaYP5qohljqkEoyhKoRadGM0YvzGciTrDJOdJDGw4MOtpyI/aOhEizsCAddr2x0qOqASjKEqhFRwTzEjfkUTGR/Kt27d4OXpl/+Tjq+HEb9BhItTtarggjSAhOQ0rS7PsJ9rnZNBBfiFENyHERSHEZSHElAxeHyyEiBJCnNT/GfbIa3OFEOeEEIFCiEVC/0kIIWYKIcKEELFPtFVcCLFWf61DQggnQ743RVFM2/GI47y17S1ik2NZ0XVFzpLLzdPa3UuNTuD+seGCzGdpOsm6o2G4zdvFtrO3DH49gyUYIYQ58D3QHWgIvCGEaJjBoWullM31f37Wn/sC0A5oCjQGXIBO+uM3AxnNKXwHuCulrA18B8zJy/ejKErBsf3adobvHE654uVY02MNzSo1y/7JCfdg3UAoUQFeXgHZGaspAPZfvk3vxXv5aMNpbK1LYFeuhMGvacgustbAZSnlVQAhxJ9AX+B8Ns6VgBVQDBCAJRABIKU8qG/vyXP6Ap/pf94ALBFCCCmlzNW7UBSlwJBS8svZX1hwfAEtK7dkoftCylmVy0kDWhHLmHAYsg1KVzJcsPnkcmQss7cF4hMYiV25Eix6owW9m9oavHsMDJtg7ICwRx6HA20yOO5lIURH4BIwXkoZJqU8IITYBdxESzBLpJSB2b2elDJVCBEDVARu5/J9KIpSAKTqUpl1aBbrLq2jm1M3vmr/FcXNi+eskX0L4eIWbTpy9WwsvjRh0XHJLPC5xJpDoZS0NGdyt/oMaeeElWX+3ZEZMsFklB6fvJvYDPwhpUwSQrwHrAI6CyFqAw0Ae/1x3kKIjlLK3bm8HkKId4F3ARwcHJ7xFhRFKQjiUuKYGDCRvdf3MrTxUMa1HIeZyOEIQPBe8P0cGr0Ebd4zTKD5ICk1jZX7glmy6zLxyWkMaO3AB551qFg6h8k2DxgywYQD1R95bA/cePQAKeWdRx7+xP/GTV4CDkopYwGEENsAVyCrBPPweuFCCAvAGoh+8iAp5XJgOYCzs7PqPlOUAi4yPpLRvqO5dPcS012n079e/5w38uAWrB8CFWpBn8UFsoillJKtZ24xe3sgYdEJdK5fmY971Kd25Uz2tMkHhkwwR4A6QogawHXgdWDAowcIIWyllDf1D/sAD7vBQoHhQohZaHcmnYAFz7jeJuBt4ADwCuCnxl8UpXC7dPcSI31Gcj/5Pos7L6aDfYecN/KwiGVyLLy9CYob7xfy8zoeepeZWwI5FnKX+lXL8Ns7bWhfx8bYYRkuwejHQUYDOwBz4Bcp5TkhxBfAUSnlJmCsEKIPkIp2tzFYf/oGoDNwBq2ba7uUcjNo05fRElVJIUQ48LOU8jNgBbBaCHFZ35YqGKQohdiBGweY4D+BkhYlWdVtVeZbGz+L7+cQsg/6/QSVn7MNIwmLjmfujotsPnWDSmWKM+flJrzSqjrmZqZxByae9SVfCFELCNePk7ihTR3+PynlvXyIz6CcnZ3l0aNHjR2Goig5tDFoI18c+AInayd+8PyBqqWqPl9DgZth7Vvg/A70mp+3QRrQ/cQUlu66wi/7rmEm4N0ONRnRqRaliufP2nkhxDEppfOzjstONH8BzvqB9xVoXVG/Az1yF6KiKErOSCn5/uT3/Hj6R9ratuVbt28pU+w5u7TuXNGmJFdrCd1m5W2gBpKapuOPw6F85xNEdFwy/VraMalrPWytDb+m5XlkJ8Ho9N1dLwELpJSLhRAnDB2YoijKo1LSUvh0/6f8d/U/Xqz9Ip+2/RRLM8vnayw5HtYN0hZR9l8FFvk/wyonpJTsuhjJ11svcDkyFteaFfikZ0Ma21kbO7QsZSfBpAgh3kAbQH+4n+hz/l9VFEXJuZikGMb7j+fIrSPSfQEAAAAgAElEQVSMbj6ad5u++/wLBaXUF7E8B2+uh3KmvVwh8OZ9Zm4JZO/l29SwKcXyga3walglXxZK5lZ2EswQ4D1gppTymn5W2G+GDUtRFEVzPfY6I31GEvoglK/bf03vWr2ffVJWjv8fnFwDHT+COjmoT5bPIu8n8u3OS6w7FoZ1CUtm9G7Im20cKWZRcPaJfGaCkVKeB8YCCCHKA2WklGrXHUVRDO7c7XOM8h1Fsi6Z5V7LcanqkrsGb5yErZOgpju4PVV/1yQkJKfx056rLAu4Qkqajnfa1WBM5zpYlyx4HUfPTDBCCH+0NSoWwEkgSggRIKWcYODYFEUpwvzD/Plo90eUL16eFV1XZG9r46wk3NXGXUrZmGQRS51OsvHEdb7ZcZFb9xPp3rgqU7rXx7FiKWOH9tyy00VmLaW8ry+l/6uUcoYQ4rShA1MUpej6PfB35hyZQ4MKDVjisQSbErlcNKjTwcb34f4NrYhlqYp5E2geOXDlDjO3nufs9fs0s7dm8YAWuDhVMHZYuZadBGMhhLAF+gPTDByPoihFmE7q+Pbot/zf+f/DrbobczrMoaRlydw3vG8BXNoG3edC9Vx2s+Whq1GxzNp2Ae/zEdiVK8HC15vTu2k1zExkoWRuZSfBfIG2Gn+flPKIEKImEGTYsBRFKWoSUxOZumcqPqE+DKg/gI9cPsI8L7qxru0Gvy+h8cvQ+t3ct5cH7sYls9A3iN8OhmBlac6krvV4p32NfK10nB+yM8i/Hlj/yOOrwMuGDEpRlKIlOjGaMX5jOBN1hknOkxjYcGDeTMO9f1OrM1axNvReZPQilkmpaaw+EMIi3yBik1J5vbUD4z3rUqmMaa/DeV7ZGeS3Bxaj7TApgb3AOClluIFjUxSlCAiOCeZ9n/eJSohivtt8PB0986bhtBTYMERbVPn2f1C8dN60+xyklGw/e4tZ2y4QGh1Pp7qVmNazAXWrFLzCmjmRnS6yX9FKw7yqf/yW/jnTnUCuKEqBcDziOGN3jcUMM1Z0XZGzrY2fxeczCD2gzRirXD/v2s2hk2H3mLnlPEeC71KvShlWDW1Np7oFf6fM7MhOgqkkpfz1kccrhRAfGCqggiA6MZr4lHjsy9g/+2BFUTK0/dp2Pt77MXal7VjqsZTqZas/+6TsOv8vHFgCLsOhySt5124OXL+XwNztF/j35A1sShdjVr8mvNrKHgvzgrNQMreyk2BuCyHeAv7QP34DuJPF8YXe30F/s/D4QhpUaEAXpy54OnjiZO1k7LAUpUCQUvLL2V9YcHwBLSu3ZKH7QspZlcu7C9y+DP+MArtW0HVm3rWbTQ8SU/jB/wo/772GAEa71+Y9t1qUzqdKx6YkO+94KLAE+A5tDGY/WvmYIqtHjR5YCAu8Q7xZeHwhC48vpE75Ong5eOHl6EWtcrUKRJ0gRclvqbpUvj70Nesvrae7U3e+bP8lxc3zcID7YRFLc0t4NX+LWKam6Vh7NIzvvC9xOzaZl1polY6rlTPNSsf54Zn7wWR4khAfSCmftcOkycuL/WBuxd3CJ8QH7xBvTkSeQCJxKuuEl6OWbOpXqK+SjaIAcSlxfBjwIfuu7+Odxu8wtuVYzEQedhdJCf+8D6f+hLc2QO08miyQDf4XI5m5JZCgyFhaO1Xgk14NaGqfh3dlJia7+8E8b4IJlVKadgnSbMjrDcduJ9zGN8QX7xBvjkQcQSd12Je2T082jW0aq2SjFEkRcRGM9htN0N0gprlO49W6rz77pJw6+iv89wF0mgLuU/O+/QxcuKVVOt4TdBvHiiWZ2r0BXRsVjErHuWHoBBMmpczDETnjMOSOltGJ0ewK3YV3qDeHbhwiVaZiW8oWDwcPujh1oVmlZnn77U1RTNSlu5cY6TOSB8kPmNdpHh3sO+T9RW6cgBVdwKmDVoLfwHXGIh8k8p33JdYeCaOMlSVjPeow0LVgVTrODXUHkw35tWVyTFIMAeEBeAd7s//GfpJ1yVQqUQkPBw+8HL1oWaUlFmZFbwBQKfz239jPBP8JlLIoxfee31O/ggGmC8dHw/JOWr2xEbsNWmcsMSWNn/dc5Qf/KySl6hjU1omxHrUpV7KYwa5pinKdYIQQD9AG9Z96CSghpSzwvxGfO8HcDYELW6DNiBx/U4pNjmV3+G58Qn3YE76HxLREyhcvT2eHzng5etHatvXz79KnKCZkY9BGvjjwBTXK1WCpx1Kqlqqa9xfR6eCP1+GKHwzdAfat8v4aaJWO/z11nbnbL3IzJpGujaowpXsDatgU3ErHuWHQO5jC4rkTTMBc2DVT28u7z2Ko2vi5rh+fEs++G/vwDvYmIDyA+NR4yhYri3t1d7wcvWhbrS3FzIvWNyOl4JNSsuTkEpafXk5b27Z86/YtZYoZaMX67nlanbEe86D1cINc4tDVO8zcGsjp8Bia2FnzSc8GtKlpWtWY85tJJBghRDdgIWAO/PzkRmVCiMHAN8B1/VNLpJQ/61+bC/QEzABvtPI0UgjRClgJlAC2PvJ8c2AZYAWkAiOllIeziu+5E4yUcO5v2PoRJN6DduO03fEsrXLell5SWhL7r+/HO8Qb/zB/HqQ8oLRlaTrad6SLYxdesHuBEhZFd7qjUjAkpyUzY/8M/rv6Hy/Vfonpbacb7o78qj+sfgka9YOXf87zOmPBt+OYtS2QHecisLW24qNu9ejbzK7QVDrODaMnGCGEOXAJraRMOHAEeEO/Q+bDYwYDzlLK0U+c+wJa4umof2ovMFVK6S+EOAyMAw6iJZhFUsptQoidwHf6n3sAH0kp3bKKMddjMPHRsPMTbfvVh8X0nNo9f3t6KWkpHLp1CO8Qb/xC/biXdI8SFiXoYNcBL0cvOtp3zJsS5oqSh2KSYhjvP54jt44wuvlo3m36ruFmU92/Acs6QMmKMNwvT+uM3YtPZpHvZVYfDMbS3IyRbrV4p31NShQrXJWOcyO7CcaQ4yitgcv66ssIIf4E+gLnszxLI9HuRIqhjflYAhH6fWnKSikP6Nv8P+BFYJv+nLL6862BG3n3VjJRsgK8uFQrRbH5A1jZA1oNAa/Pwcr6uZu1NLekvV172tu1Z7rrdI5GHMU72BvfUF92huykuHlxXqj2Al6OXrhVdzNc94OiZNP12OuM9BlJ6INQvm7/Nb1r9TbcxdJSYP1gSEmA11bnWXJJTtWx+qBW6fhBYgqvuVRnvFddKpd5/p6Jos6QCcYOCHvkcTjQJoPjXhZCdES72xkvpQyTUh4QQuwCbqIlmCVSykAhhLO+nUfbtNP//AGwQwgxD61b7YW8fTtZqNUZRh6AXV/DwaVwabvWJ9ygV66btjCzwNXWFVdbVz5u8zEnIk/gE6ot7NwVtgsLMwva2rbFy9EL9+rueVtyQ1Gy4ezts4zyHUWKLoXlXstxqWrgDb28P4WwQ/DKL1CpXq6bk1Ky41wEs7cFEnwnng51bJjWswH1q5Z99slKlrJTrj+j2WQxwFHgw4d3KBmdmsFzT7azGfhDSpkkhHgPWAV0FkLUBhoAD6tJeuuTUEIWbb6PlqD+EkL0B1YATy3lFUK8C7wL4OCQhzOti5XS6h41fhk2jYW1b0LDvtD9GyhTJU8uYW5mjnNVZ5yrOvORy0ecuX0G72BvfEJ9+HT/p5gLc1yquuDl6EVnh86532ZWUZ5hV+guJu+ZTAWrCvzq8Ss1y9U07AXPbdS+xLUeof1by6XT4ff4aksgh69FU6dyaX4d4oJb3UqFfqFkfnnmGIwQ4nO07qbf0ZLG60BV4CLwfmbjHEKItsBnUsqu+sdTAaSUszI53hyIllJaCyEmAVZSyi/1r30KJAKrgV1Syvr6598A3KSUI4QQMUA5/YC/AGKklFl+BTHYOpi0FNi/GPxnawP/Xb6CFgMNttmRlJLz0efTS9aE3A/BTJjRsnJLPB098XTwpEqpvElyivLQ74G/M+fIHBpUaMASjyWG/0JzOwiWu0HlBjB4K1g8/wzLG/cS+GbHRTaeuE7FUsWY0KUurzlXL1KVjnMjzwb5hRCHpJRtnnjuoJTSVQhxSkqZ4QYOQggLtG4vD7RZYkeAAVLKc48cYyulvKn/+SVgsr7d14DhQDe0pLYdWCCl3CyEOAKMAQ6hDfIvllJuFUIEoiU8fyGEBzBXSpnlpHiDL7S8fRk2j4OQvdoK494LoWItw10PLdkE3QvCO8QbnxAfLt+7DECzSs3SS9ZUK13NoDEohZtO6ph3dB6rz6/GrbobczrMMfykk+Q4+MkD4iK1xZTWz7dVRmxSKsv8r/DTnqtIYFj7GrzvVosyVmrtWU7kZYI5gFZJeYP+qVeACfpEcFJK2TyLc3sAC9CmKf8ipZwphPgCOCql3CSEmAX0QZtWHI2WIC7o72aWos0ik8B2KeUEfZvO/G+a8jZgjP6upT3alGgLtLudkVLKY1m9t3xZya/TwYn/g52fQloSuE2BtmPAPH/WqV6NuZp+Z3Mh+gIAjSo2Sk82DmULfEEGJR8lpCbw8Z6P8Qn1YUD9AXzk8hHmBi7LgpSwcQScXgcD/9bGPHMoTSdZdzSMb3de4nZsEn2bV2NS13rYl1ezMZ9HXiaYmmi/uNvqnzoAjEe7K2klpdyby1iNJr9KxQDa3uBbJ8KF/6BqU22BZrVMc7NBhN0PwztUu7M5c/sMAPXK18PT0TN9mwFFycydhDuM9RvLmdtnmOQyiYENB+bPhY+sgC0TwH0adPoox6fvvhTF11sDuXDrAc6O5fmkV0OaV1eTYXLD6OtgCoJ8TTAPnd8EWydBXBS0HQVuU6FY/n+Luhl7M3022onIEwDUtK6Jp6MnXRy7ULd8XTXQqaS7FnONkT4jiUqIYnaH2Xg65lMp/OvH4ZeuUKMTDFgHZtkfI7kU8YCvtwbifzEKhwolmdK9Pt0bV1V/r/NAXt7B2AOLgXZo3VV70VbPh2d5YgFglAQDkHBPm2p5fBWUr6GNzdTslP9x6EXGR+Ibqm0zcCziGDqpw6GMQ3qyaVixofpHWYQdizjGuF3jMBfmLOq8iGaVMhx2zXvx0fBjJ0Bq4y4lK2TrtNuxSXznfYk/DodSqrgFYzvXYdALjhS3UAsl80peJhhvtBlkq/VPvQW8KaX0ynWURma0BPPQtT3aJIDoK9DiLfD6Mtv/iAzlTsId/ML88Anx4fDNw6TKVKqVqpbejda0UlO1zUARsu3aNqbtnYZdaTuWeiyletl82qVDp4Pf+8O1ABi6Xdv++BkSU9JYsfcaP/hfITEljbdcHRnnUYfypVQ9v7yWlwnmqYH8Zw3uFxRGTzCgrUYOmAv7FmplL3rMhYYvGmxKc07EJMWwK2wXPiE+7L+xnxRdCpVLVMbDUb/NQOWWhh/gVYxCSsmKsytYeHwhLSu3ZKH7wvxdxBvwDez6Cnp+Cy7DsjxUp5NsPn2Dudsvcv1eAl4NqzC1e31qVsq78jHK4/Iywfigzdr6Q//UG8AQKaVHboM0NpNIMA/dPA2bxsDNk1Cvh1YJwNru2eflkwfJD9gdvhvvEG/2Xt9LUloSFawq4OHggaejJy5VXdQ2A4VEqi6VmYdmsuHSBro7defL9l9S3Dz/9rbnih+s7gdNXoV+y7P8snU0OJovtwRyKuwejaqV5ZOeDWlbq2hXOs4PeZlgHIAlaLPIJLAfGCulDM2LQI3JpBIMQFoqHPoB/GaCmQV4fQathuZoYDM/xKfEs+f6HrxDvNkdvpuE1ASsi1unbzPgauuqthkooOJS4vgw4EP2Xd/HsCbDGNNiTP52icaEw48doVRlGO6rVcjIQMidOOZsv8DWM7eoUrY4k7rWp18LVek4vxh6R8sPpJQLnisyE2JyCeah6Gva3uJX/cGhrValuVJdY0eVocTURPbd2IdPiA/+Yf7EpsRS2rI0btXd8HT0pF21dlhZqGKBBUFEXASj/UYTdDeIaa7TeLXuq/kbQGqyVjA2MhDe9QebOk8dEhOfwpJdQazcH4yFmRnvdarF8I41KFmswO9/WKCoLZOzwWQTDGiLy079AdunQkq8tt9Mu3G5Ko9haMlpyRy8eTC9EGdMUgwlLErQ0b4jXo5edLDroLYZMFEXoy8yyncUD5IfMK/TPDrYd8j/ILZNhkPL4NWV0Oilx15KSdOx5mAIC3yDiElI4dVW9nzYpR5VyqovL8Zg6AQTJqXMp+kkhmPSCeah2EjtH965v6FyQ22Bpv0z/78aXYouhSO3juAT4oNvqC/RidEUNy9Oe7v2eDp60sm+k9pmwETsv76fCQETKGVRiu89v6d+hfr5H8TZv2DDUGjzPnT/376EUkq8z0cwe9sFrt6Oo13tikzr0ZCG1VSlY2NSdzDZUCASzEMXt8GWD7WNltq8B50/ydNNlgwpTZfG8cjjeId44xviS2RCJJZmlrSt9r9tBqyLP//+Ocrz2xi0kS8OfEGNcjVY6rGUqqWq5n8QUZfgJ3ftC9TgLel36Wevx/DVlvMcvBpNrUqlmNazAe71Kqs1WSYg1wkmkzL9oBWfLCGlLPCdngUqwQAk3gffL+DIT2DtAL2+gzr5tKI6j+ikjtNRp/EO8cY7xJubcTexEBa0tm2Np6Mnnat3pmIJNQvI0KSULD6xmJ/O/ERb27bMd5tP6WJG+MKSFAs/e2iVLUbsAWs7bsUk8s2Oi/x9IpzyJYsx3rMOr7d2wFJVOjYZqlRMNhS4BPNQ6EFtSvPtS9D0Neg6C0oVvF/KUkrO3znPzpCdeId4E/YgDDNhRqsqrfBy9MLDwYPKJSsbO8xCJzktmU/3f8qWq1t4qfZLTG873ThTzKWEv4fDmQ0wcCNx9h34cfdVlu++gk4HQ9o7Mcq9NmVVpWOToxJMNhTYBAOQmgR7voU988GqLHSbo23dXEC7D6SUXLp7iZ0hO/EJ8eFqzFUEguaVm+PpoFURsC1ta+wwC7yYpBjG+4/nyK0jjGkxhuFNhhuvy+nwT7B1Ijr3T9hQ8nXm7bxI5IMkejW1ZXK3+lSvoCaEmCqVYLKhQCeYhyLOa3cz149CbS/oNR/KFfjhMa7cu5K+p83FuxcBaFyxMV5OXng5eOVfyZJCJPxBOCN9RxL2IIwv231Jr5q539L7+YM5Br90Jbpqe96M+4DAiDhaOJTjk54NaeVY3nhxKdmiEkw2FIoEA6BLgyM/g8/n2mOPT6H1cCgkZVxC74emj9mcu6PtV1e/Qn28HL3wdPSkprWBt+ktBM7ePsso31Gk6FJY6L4Ql6ouxgsmPpqUpe25l5iGZ+wXlClfiSnd69Ozia0awC8gVILJhkKTYB66Fwr/TYDL3mDnrE1prtLQ2FHlqeux19M3UDsVdQqA2uVqpxfjrFOujvol9QS/UD8m755MxRIVWeqxlJrljJeQ7zxI4M7yF3G8f5RBfEnnzl15+wUnrCwLx5ehokIlmGwodAkGtIHTMxtg+2Rt1ln78dBxIljkYy2pfBIRF4FPqA8+IT4ciziGROJY1jH9zqZhBbXNwJrANcw5PIeGFRuyxGMJNiVsjBJHYkoaK/cHk+Y3m1FiHZuqT6Lda5OoWLrw/b0sClSCyYZCmWAeirsDO6bC6bVgU1e7m3FwNXZUBnM74TZ+oX54h3hz5NYR0mQadqXttAkCTl40sWlSpLYZSNOlMe/oPH4L/A336u7M7jDbKFUUpJT8d/omc7ZfoGbMQVYWm0ts3X6UfWNFgZ2QoqgEky2FOsE8dNkHNo+HmFCt7LnHDG3WWSF2L/Eeu8J24R3izYGbB0jVpVK5ZGXtzsbBkxaVWxTqbQYSUhOYumcqvqG+vNngTSY5TzLK+z0WcpevtpznROg9OlZJZEXih1ha28IwX6Ps4qrkHZVgsqFIJBjQFrPtmgkHf4Cy1aDnfKjXzdhR5Yv7yfcJCAvAO8Sbfdf3kaxLpqJVRTwcPPBy8sK5ijMWZgV+zXC6Owl3GOs3ljO3zzDJZRIDGw7M9xjCouOZvf0CW07fpHKZ4nzkVZOXTw1HRF3UF7Gsne8xKXlLJZhsKDIJ5qHwo9qU5sjz0KgfdJ8DpYvOQsa4lDj2hGvbDOy5voeE1ATKFS9HZ4fOeDp44mrriqV5wV3Udy3mGiN9RhKVEMWcDnPwcMzfLZtiElJYuusyv+4LxtxM8G7HmrzbsSalfKfC4eXw6ipo9GK+xqQYhkow2VDkEgxoJdH3L9R20bQsCV2/huYDilx/eEJqAvuv72dnyE4CwgOIS4mjjGUZ3Kq74eXoxQt2L+TvJlu5dCziGGP9xmJhZsHizotpWqlpvl07JU3HH4dD+c77EvcSUni5pT0Tu9SjqrWVNuHkr3fAdRR0+zrfYlIMyyQSjBCiG7AQMAd+llLOfuL1wcA3wHX9U0uklD/rX5sL9ATMAG9gnJRSCiFaoe2wWQLY+vB5/TljgNFAKrBFSvlRVvEVyQTzUNQl2DwWQg9AjU7QeyFUqGHsqIwiOS2ZAzcO4B3ijV+YHw+SH1DSoiSd7Dvh6ehJe7v2Jr3NwLZr25i2dxp2pe1Y6rmU6mXyZxGqlBK/C5HM3BrI1ag42tasyLSeDWhspy9cGnkBfuoMVZvA4P+gAN8dKo8zeoIRQpgDlwAvIBw4ArwhpTz/yDGDAWcp5egnzn0BLfF01D+1F5gqpfQXQhwGxgEH0RLMIinlNiGEOzAN6CmlTBJCVJZSRmYVY5FOMAA6HRz7FbxngC4VOk/TyqWbF54xiZxKSUvh8K3DWrIJ9eNu0l2szK1ob9ceL0cvOtp3NE5RyAxIKVlxdgULjy+kZeWWLOq8KN+qUp+7EcPMLYHsv3KHmjal+LhHAzwaPFLpOClWSy4J0TBitzb2pxQa2U0whvxN0hq4LKW8qg/oT6AvcD7LszQSsAKKoVVvtgQihBC2QFkp5QF9m/8HvAhsA94HZkspkwCelVwUtK2YXd6But1g60TY+YnWpdFnMdjmXxeLKbE0t6SdXTva2bXjE9dPOB6hbTPgE+qDT6gPlmaWtKvWDk9HT9yquxltm4FUXSpfHfyKv4L+ortTd75s/2W+dOlF3E9k3o6LbDgeTrkSlnzepxED2jxR6VhK7e74ThAM/EcllyLMkAnGDgh75HE40CaD414WQnREu9sZL6UMk1IeEELsAm6iJZglUspAIYSzvp1H27TT/1wX6CCEmAkkAhOllEeevJgQ4l3gXQAHh4JfsytPWNvB67/D+X9h6yRY7gbtxkKnyWBZwtjRGY2FmbaNQGvb1kxtM5VTUafYGbwTn1Af/MP9sRAWtLFtg5ejF50dOlPeKn9qaMWlxPFhwIfsu76PYU2GMabFGIOv8YlPTmX57qv8GHCVNJ1keIeajHKvjXWJDLq9Dv+kbSDm8SnU7GTQuBTTZsgusleBrlLKYfrHA4HWUsoxjxxTEYjVd2m9B/SXUnYWQtRGG7t5TX+oNzAZSABmSSk99ed3AD6SUvYWQpwF/NC6z1yAtUBNmcUbLPJdZBmJjwbv6XDiN6hQSxubqWGE7XNNmJSSs7fPptdHC48Nx1yY41zFWdtmwNHDYCvmI+IiGOU7isv3LvOJ6ye8UvcVg1znIZ1O8tfxcObtvEjE/SR6NtEqHTtUzGRMKuwI/NodanvA639od8lKoWMKYzBtgc+klF31j6cCSClnZXK8ORAtpbQWQkwCrKSUX+pf+xTtrmQ1sEtKWV///BuAm5RyhBBiO1oXmb/+tSuAq5QyKrMYVYLJwlV/2DwO7gZDy0Hg9SWUKGfsqEyOlJIL0RfSk03w/WAEghaVW6SXrMmrXSIvRl9klO8oHiQ/4Fu3b2lv1z5P2s3M/su3+WpLIOdv3qd59XJ80rMBzk4VMj8h7g782FErsjoiAEqoqsiFlSkkGAu0bi8PtFliR4ABUspzjxxjK6W8qf/5JWCylNJVCPEaMBzohtZFth1YIKXcLIQ4AowBDqEN8i+WUm7V3wFVk1J+KoSoC/gCDuoOJheS48F/FhxYAqUqQY950LCPsaMyWVLK9G0GvEO9CbobBEBTm6Z4Onri6ej53DO89l/fz4SACZSyLMVSj6XUq1AvL0N/zJWoWGZtDcQnMBK7ciWY3L0+vZs+o9KxLg3WvALB++CdnVCtucHiU4zP6AlGH0QPYAHaNOVfpJQzhRBfAEellJuEELOAPmjTiqOB96WUF/R3M0vRZpFJYLuUcoK+TWf+N015GzBGP325GPAL0BxIRhuD8csqPpVgsunGSdg0Gm6dgfq9tERTVm3+9SzBMcH4hPqwM3gngdGBADSo0AAvRy+8HL1wsnbKVjsbgzby+YHPqVWuFt97fJ9nd0RPio5LZqHPJdYcCsXK0pxR7rUZ0i6blY53fQ0Bc7Qu1VaDDRKfYjpMIsGYOpVgciAtBQ58r93RmBeHLl9Ai0Gqjz2bwh+Ea9sMhHpzOuo0oG0z0MWxC56OntQuV/upOwQpJYtPLOanMz/R1rYt893mG2SKdFJqGqv2B7PY7zJxSakMaOPAB551sclupeMgH+3updkb8OLSIrdotyhSCSYbVIJ5DneuaGMzwXvAsb32jVXVlsqRW3G38A31ZWfwTk5EnkAicSrrlH5nU79CfVJ0KUzfN52t17bSr04/PnH9BEuzvF2oKKVk65lbzN4eSFh0Au71KvFxjwbUqVIm+43cC9XGXcrawTveqohlEaESTDaoBPOcpNRmme2cBimJ4DYZXhirVmo/h9sJt/EN8cU7VNtmQCd12JW2o2yxsgRGBzKmxRiGNxme5/vanAi9y1dbAjkWcpf6VcswrWcDOtSplLNGUpPgl25w57JWxLJirTyNUTFdKsFkg0owufTgFmz7SFs/U6WxtkDTrqWxoyqw7ibeZVfYLnaG7CTobhDjW42nV81eeXqNsOh45u64yOZTN6hUpjgfetXlVefqmJs9RwLb8qG2VXf/1WryRxGjEkw2qASTRwL/0yoBxEaA60j4//buO0qqInvg+Aq1FqgAABmhSURBVPcOkxiQpKIoKKCyikQFRFFQTKgIIgpGDLAY17Pr6qprWNfs6q7ITwQxEVQMuKyZoKIoEhUREEEEFCSKDGlmmHR/f1Q1PIYZJvXrnnA/5/SZ1y9U3340fbuq3qs67e+QXCveUZmArVk5PDv1J16avoIEgcGnNOe6bkdQK6WM91p/9xb8dxCceDOc/XB0gzUVXkUYKqbK+t+8Xxk9YyX105Kpl5ZEvZrJ1E9Lol4t/7emW1/fP6+ZVKNqT917TE93M+aUf7hLmhe/B+cPgSO6xzuyai83L5/X56ziqSlL2bQjmwuPO5Tbz/4DjeqWY4SGDYvdUDCHnQhn3B+tUE0VZAmmDJITE6idksiGbVksXb+N9Iwctu/M3ef+9Wom7U5IaZFln5DSkvxy5Lnbb4/xnSq61LouqbS+2H35jO0DbS9zv27T9nFzngmFqvLZko088uFiftywnROaNWDUeS1p3bicY6ft3AZvXAnJteGil63fzeyTNZFFqYksOzef9MxstmTksDkjh80Z2aRnZJPun6dnZLM5I5vNGTl+H7ctOy+/yDJrpyQGklFSICElu4RVa3diiiSw/VITSShLe3o05WTBtCdg+hB3N3ePx6BVX7t8NUYWr93KIx8u5osff6PZAbW465yjObPlQeWvRavC+Gtcn9uAd20IoWrMmshiLDkxgYb7pdJwv9QSH6OqZGTnkZ6Zw+YdkWSUTXpmDuk7svdITOmZOazenMnmjGy2ZOZQ1O+CBGFXDWh3ranwmlJdn7zqpyVTMzmKc7YnpcLp98KxfdwMmm8PhAVvwXn/hrqNo/c6Zg8btmXxn8lLeXPuKvZLTeK+ni25ovPhJCdGqSY86zlYNME1i1lyMSVgNZhK2Mmfl69sy9p3TSk9I2d3wvJ/M7LziiwzJTFhj9pSYbWm3dt216ISi2vGy8+DWSPg04dAEtyXU4eBdoNmFGVm5/H8F8sZ8flP5OTlM+DEpvyp+5HUS0uO3ousmu0GsTzqLDfyttVGqzW7iqwEKmuCKauduXkFmvAiCSknkKR2/42sz80v+jOyX0oi9Wrtrim5WlOB5ry0JA7KW0fTmfdQ85fP0SYnIOcPhYZHx/DdVz35+cqEeb/yxKQlrNuaxTmtDuaOHkfT9IAoX8G34zcYcQokJsPgz23QU2NNZGZvKYk1aFinBg3rlK4Zb0d23q4mvPTMQNPdDvc8mJB+3rSD9IwctmTmFFLaYPoktOS+X8ZS69kuvJZ8MRPrXUrtWml7JaSCNan6acklGxOrmpi5fBMPffA9C3/dStvGdRl6aXs6NQvhYor8PBh/LWRsgkFTLLmYUrEEY/ZJRKidkkjtlESalOL7Ky9f2ZJZWE2pJeO29OakZf/m6vRxnP77VzyVeTNfZR/B5owcMnOKbsZLTUqgfloydX3fUuQih+AVepH1df2l43VL0oxXiaz4bQePfriYyd+v55C6qQzp345ebQ8J78KOzx6FFZ/7WU7bhvMapsqyJrJq1ERW4SydDO//Bbb+Cp0Gw+n3kpWQtrumtCOQmCI1JX/xw5bMPZv29tWMVyc1sUBf0t41pcj6yPPaKYkV6t6l9Ixsnv7kR8bO+JmUxARuPO1IBp7cLNxa3dLJ8NrF0O4KuGBYeK9jKh3rgykBSzAVwM5t8MmDMHukGzCx51PQ4qxSFaGqbNuZu+vy76L6lII1qc0Z2WzLKvrepcQEKeLS8EBiqum3+z6oujWTov6Fn52bz5gZKxn6yY9s35lL/46HceuZLThwvxKOdFxWm392g1jWbeKaxqrx1Nlmb5ZgSsASTAWyara7pHnjD9DqIjjncagVzrTDEbl5+b4Zr/CLHXbVlHYEElRmNlk5Rd+7VDOpxj77kgqrSdWtmbTXWGCqysSF63hs4g/8vCmDri0O5O5zj+EPB5dipOOyyt0JL53tRs4e/JkNYmn2Yp38pnJp0gmumwZfPgXTnoSfPoUej0Kb/qFdEptYI4H9a6ewf0nnPfGycvJcAipwkUOkCS89c3fCWrxuK1syckjPzCGviGY8EaiTmuTvTXKJZ/OObOav3kKLg2oz+tpOdGtRypGOy2PinbBmHvR/1ZKLKRerwVgNpuLZ8IOrzaye7cYz6zkE6h8e76jKJT/fNeMVdTn4lkDTXXpGzq77Wfp1aBzbixTmvwETBrvpF856MHavayoVayIrAUswFVh+Psx9ET6+HzQfut8LJ1wHCXapcmjWfw/Pd3dTLgx4F2pYA4cpXEkTTNW5ftNULQkJ0OmPcNMsaHoKTLoLXjgD1i2Md2RVU9ZWePNKSK0DF71kycVEhSUYU7HVbQyXvQF9X3TT847s5q46y8mKd2RVhyq8ezP8vsKNkLzfwfGOyFQRlmBMxScCrS+Cm+dA637wxZMwogusnB7vyKqGmcPdCMln/AOadol3NKYKCTXBiEgPEVkiIstE5M5Ctl8tIhtF5Fv/GBTY9i8RWSQii0VkqPi73kTkeBFZ4MvctT5w3G0ioiIS7jWuJvbSGkCf4XDlBMjLhlHnuhs1s7bEO7LK65eZMOVeOLqn69g3JopCSzAiUgMYBpwDtAQuFZGWhez6hqq2848X/LEnAV2ANkAroCPQze8/HBgMHOUfPQKv2QQ4E/gllDdlKoYjusONM910vV+PgmEnwA8fxDuqymf7RnjranczZe9hNkKyibowazCdgGWqulxVs4HXgd4lPFaBVCAZSAGSgPUi0gioo6oz1F3+Nga4IHDcU8Df/PGmKkuu5WbLHPQJpO0Pr18Gbw6AbevjHVnlkJ8Hb18LmZuh/1gbxNKEIswEcyiwKvB8tV9XUF8R+U5ExvsaCKo6A5gKrPWPSaq62B+/urAyRaQX8Kuqzo/6OzEV16HHubvNT78PlkyEYR3hm7EUOSObcaY+DCumuUngDm4d72hMFRVmgimsvl3wf/17QFNVbQN8DIwGEJEjgWOAxrgE0l1EuhZVpoikAXcD9xUblMhgEZkrInM3btxY4jdjKrAaSXDKX+GGr+CgVu6KqNHnu6FOzN6WTIQv/g3tr4T2V8Q7GlOFhZlgVgNNAs8bA2uCO6jqJlXd6Z8+Dxzvl/sAM1V1u6puBz4COvsyg3PuRso8AmgGzBeRlX79NyKy1/WWqjpSVTuoaocDD4zh8BsmfAccCVe97+78Xzsfhp8EXw6BvKIHtax2Nq90d+of3BrOfSLe0ZgqLswEMwc4SkSaiUgycAnwbnAH36cS0QtY7Jd/AbqJSKKIJOE6+Ber6lpgm4h09lePDQDeUdUFqtpQVZuqalNcIjpOVdeF+P5MRZSQAB2ugZtmw5FnwMf/gOdPgzXfxjuy+MvJcv1UCvQbayMkm9CFlmBUNRe4GZiESxxvquoiEXnA95cA3OIvRZ4P3AJc7dePB34CFgDzgfmq+p7fdgPwArDM7/NRWO/BVGJ1GsElr7ov0u3r3RAoU+6D7Ix4RxY/E+9wNbs+I6BBs3hHY6oBG4vMxiKr+jLTXXL5ZjTUbwbnPw3NuxV/XFXy7Tj43/XQ5c9w5j/jHY2p5GwsMmMiataDXkPhqvfcvR5jesE7N7lLdKuD9YvcDalNT3GDhhoTI5ZgTPXRrKu70uzkv7hf9M90gkUTqvYlzVlb4I0rIbWuDWJpYs4SjKlekmrCGfe7e2fqNHJ3sr9+OWxds8/DKiVVV1PbvBIufhlqN4x3RKaasQRjqqdGbWDQp3Dmg272zGEnwJwX3Tw0VcWMZ2Dxe67P5fCT4h2NqYYswZjqq0YidLkFbvwKDmkPH9wKo86D336Md2Tl9/NXMOUfcMz5bsw2Y+LAEowxDZrDgHeg97Ow4Xt3g+a0JyA3O96Rlc229fDWNW6aaRvE0sSRJRhjwH0Jt7/czTlzdE/49CEYeSqs/jrekZVOXi68PdB17vcb6zr3jYkTSzDGBNVu6DrELxnnLmN+4XSYeBfs3B7vyEpm6kOw8gvo+R84uFW8ozHVnCUYYwpz9Llw0yzoOBBmPgvPngjLPo53VPv2w4fw5VNw3FXQ7rJ4R2OMJRhjipRaxw1nf81ESEqFV/rCf6+DHZviHdnefl8BE66HRm3hnH/FOxpjAEswxhTv8BPhui+g699g4dtuzpnv3qo4N2hGBrEUoN8YlwyNqQAswRhTEkmp0P1uuG6aG8/sv4PgtX6Qvqr4Y8P20e2w7jvoMxLqN413NMbsYgnGmNI4qCUMnAw9HoeV090NmrOec1MQx8O8V+GbMXDyrfCHHvGJwZgiWIIxprQSakDn6+Gmma757KO/wUtnw4bFxR8bTesWuJtDm3WF0+6O7WsbUwKWYIwpq3qHweXj4cLn3fTMI06BqY9A7s7ijy2vzHQ3iGXN+tDXBrE0FZMlGGPKQwTa9HM3aLa6ED5/3CWaX2aF95qRQSy3rIKLR0Ftm/rbVEyWYIyJhloHwIUj4fK3ISfTNZl9cBtkbY3+a301FH54H858AA7rHP3yjYkSSzDGRNNRZ8CNM6DzDTDnBXi2MyyZGL3yV06Hj/8JLXtD5xujV64xIbAEY0y0pdSGHo/CoI/dWGDj+rvBJ7dvKF+529bB+GugQTPo9YwNYmkqPEswxoSlcQcY/Dmcdo9r0nqmo7usuCw3aOblwvhrXZNbvzFulAFjKjhLMMaEKTEZut0O10+HhsfAOzfC2Avc0C6l8ekD8PN0OH8IHHRsOLEaE2WhJhgR6SEiS0RkmYjcWcj2q0Vko4h86x+DAtv+JSKLRGSxiAwVce0BInK8iCzwZQbXPyEiP4jIdyIyQUTqhfnejCmVA1vA1R+6sc1Wf+0Gz/zq/1zNpDg/fADTn4bjr4G2l4QfqzFRElqCEZEawDDgHKAlcKmItCxk1zdUtZ1/vOCPPQnoArQBWgEdgW5+/+HAYOAo/4jcvjwFaKWqbYClwF2hvDFjyiohAToOcqM0Nz8VJt8DL57hbpgsyu/LYcIN0Kgd9HgsVpEaExVh1mA6ActUdbmqZgOvA71LeKwCqUAykAIkAetFpBFQR1VnqKoCY4ALAFR1sqpGfg7OBBpH760YE0V1D4VLx7l7WLashue6uSvDcjL33C8nE94Y4DrzbRBLUwmFmWAOBYIjAa726wrq65u1xotIEwBVnQFMBdb6xyRVXeyPX12CMq8FPir/WzAmJCJwbB+4aTa0uxS+/A8M7wIrv9y9z4e3wfoF7v6a+ofHL1ZjyijMBFPYNZQFL595D2jqm7U+BkYDiMiRwDG4WsihQHcR6VqSMkXkbiAXeLXQoEQGi8hcEZm7cePGUrwdY0KQ1gB6D4MB74Dmwajz4N1bYOZwmPcKdL0dWpwd7yiNKZMwE8xqoEngeWNgTXAHVd2kqpGBm54HjvfLfYCZqrpdVbfjaiOdfZnBpq89yhSRq4CewOW+CW0vqjpSVTuoaocDD7QhNkwF0fxUuGEGnHQLzBsLE+906061rkRTeYWZYOYAR4lIMxFJBi4B3g3u4PtUInoBkeFofwG6iUiiiCThOvgXq+paYJuIdPZXjw0A3vFl9QDuAHqpakaI78uYcCSnwVkPwh8/hU7XQd8X3cjNxlRSoQ3Bqqq5InIzMAmoAbykqotE5AFgrqq+C9wiIr1wTVq/A1f7w8cD3YEFuCawiar6nt92AzAKqImr2UT6Wp7BXRAwxV+5PFNVrw/r/RkTmkPau4cxlZwU0ZJULXTo0EHnzp0b7zCMMaZSEZGvVbVDcfvZnfzGGGNCYQnGGGNMKCzBGGOMCYUlGGOMMaGwBGOMMSYUlmCMMcaEwhKMMcaYUFTr+2BEZCPwcxkPPwD4LYrhRIvFVToWV+lV1NgsrtIpT1yHq2qxY21V6wRTHiIytyQ3GsWaxVU6FlfpVdTYLK7SiUVc1kRmjDEmFJZgjDHGhMISTNmNjHcARbC4SsfiKr2KGpvFVTqhx2V9MMYYY0JhNRhjjDGhsATjiUgPEVkiIstE5M5Cth8mIlNFZJ6IfCci5wa23eWPWyIiZ5e0zDDjEpEzReRrEVng/3YPHPOZL/Nb/2gYw7iaikhm4LVHBI453se7TESG+knlYhXX5YGYvhWRfBFp57fF4nwdLiKf+Jg+E5HGgW1XiciP/nFVYH0szlehcYlIOxGZISKL/Lb+gWNGiciKwPlqF6u4/La8wGu/G1jfTERm+fP4hriJEGMSl4icVuDzlSUiF/ht0ThfL4nIBhFZWMR28Z+RZT624wLbQvt8oarV/oGbEO0noDmQDMwHWhbYZyRwg19uCawMLM/HTXbWzJdToyRlhhxXe+AQv9wK+DVwzGdAhzidr6bAwiLKnQ2cCAhuIrlzYhVXgX1aA8tjfL7eAq7yy92BsX65AbDc/63vl+vH8HwVFVcL4Ci/fAiwFqjnn48CLorH+fLPtxdR7pvAJX55RORzEKu4Avs0wE2wmBaN8+XL6Aoct4//W+f6z4jgpp+fFfbnS1WtBuN1Apap6nJVzQZeB3oX2EeBOn65LrDGL/cGXlfVnaq6AljmyytJmaHFparzVDUS4yIgVURSSvn6UY+rKOKmz66jqjPUfbrHABfEKa5LgXGlfO3yxtUS+MQvTw1sPxuYoqq/q+pmYArQI4bnq9C4VHWpqv7ol9cAG4Bib7wLO66i+F/f3XGz5QKMJobnq4CLgI80ilO7q+o0XNIqSm9gjDozgXr+MxTm58sSjHcosCrwfLVfF3Q/cIWIrAY+BP5UzLElKTPMuIL6AvNUdWdg3cu+On5vGaq+5Y2rmbgmqs9F5JRAmauLKTPsuCL6s3eCCft8zcf9OwH0AfYTkf33cWyszldRce0iIp1wv+h/Cqx+2DfFPFWGHzbljStVROaKyMxIMxSwP5Cuqrn7KDPsuCIuYe/PV3nOV0mU9nsqGp8vSzBeYV8YBS+vuxQYpaqNcdXNsSKSsI9jS1JmmHG5AkSOBR4Hrgscc7mqtgZO8Y8rYxjXWuAwVW0P3Aq8JiJ1SlhmmHG5AkROADJUNdiWHYvzdRvQTUTmAd2AX4HcfRwbq/NVVFyuAPdLdyxwjarm+9V3AUcDHXFNL3fEOK7D1N2hfhkwRESOKGGZYccVOV+tgUmBY8p7vkqitJ+jaJwvSzDeaqBJ4Hlj9m46GYhrw0VVZwCpuLF8ijq2JGWGGRe+g3ECMEBVd/26VNVf/d9twGu4qn9M4vJNiZv8+q9xv3pb+DIbB46P+fny9vp1GYvzpaprVPVCn3jv9uu27OPYmJyvfcSF/2HwAXCPb3aJHLPWN8XsBF4mtucr0mSHqi7H9Z+1x425VU9EEosqM+y4vH7ABFXNCRxT3vNVntjD/HxZJ79rXiQR17nVjN2dd8cW2Ocj4Gq/fIw/2QIcy56d/MtxnYHFlhlyXPX8/n0LKfMAv5yEa5O+PoZxHQjU8Oub437hNfDP5+A6ICOdiufGKi7/PAH3H6t5HM7XAUCCX34YeMAvNwBW4Dpg6/vlWJ6vouJKxvU1/LmQchv5vwIMAR6LYVz1gZTAPj/iO+JxHfDBTv4bYxVXYPtM4LRonq9AOU0pupP/PPbs5J8d9udLVS3BBP4BzgWW4n5R3+3XPQD08sstgen+Q/UtcFbg2Lv9cUsIXGlRWJmxigu4B9jh10UeDYFawNfAd7jO/6fxX/gxiquvf935wDfA+YEyOwALfZnP4L/4Y/jveCows0B5sTpfF+G+DJcCL+C/JP22a3EXjyzDNUXF8nwVGhdwBZBT4PPVzm/7FFjgY3sFqB3DuE7yrz3f/x0YKLM57sqoZbhkkxKruPy2prgfVAkFyozG+RqHa37Owf1IGghcj/8xhEsSw3zcCwhcFRnm58vu5DfGGBMK64MxxhgTCkswxhhjQmEJxhhjTCgswRhjjAmFJRhjjDGhsARjTEhE5H4Rua0CxLFSRA4ofk9jossSjDHGmFBYgjGmFESkloh8ICLzRWShiPQP1hBEpIOIfBY4pK2IfOrn2vij36eRiEzzg2cujAz4KSLD/SCNi0Tkn4HXXCkij4ibf2WuiBwnIpNE5CcRud7vc6ovc4KIfC8iI4JjrAXKukJEZvvXfk5EaoR5vkz1ZgnGmNLpAaxR1baq2gqYWMz+bXDDdJwI3Ccih+AGYZykqu2Atri74MHdGd7BH9NNRNoEylmlqicCX+DnD8EN4/FAYJ9OwF9xgykeAVwYDEREjsGNFN3Fv3YecHkp3rsxpZJY/C7GmIAFwJMi8jjwvqp+Uczo/e+oaiaQKSJTcUlgDvCSiCQB/1PVSILpJyKDcf8vG+GGtfnOb4vMzLgAN5TINmCbuJkR6/lts9UN8IiIjANOZvf8JwCnA8cDc3zMNXHzuBgTCkswxpSCqi4VkeNxY1I9KiKTccOxR1oDUgsesncROk1EuuJqNmNF5AlczeQ2oKOqbhaRUQXKiszlkx9YjjyP/D/e67UKPBdgtKreVczbNCYqrInMmFLwTVwZqvoK8CRumtqVuJoB7J5sKqK3iKT6SadOxdUeDgc2qOrzwIu+jDq4wUm3iMhBwDllCK+TuHnnE3BNYV8W2P4JcJGINPTvpYGPxZhQWA3GmNJpDTwhIvm4kWtvwDU1vSgifwdmFdh/Nm7OlMOAB1V1jYhcBdwuIjnAdtx8PSv8JFWLcEPCTy9DbDOAx3yM03BzAe2iqt+LyD3AZJ+EcoCbgJ/L8FrGFMtGUzamChCRU4HbVLVnvGMxJsKayIwxxoTCajDGGGNCYTUYY4wxobAEY4wxJhSWYIwxxoTCEowxxphQWIIxxhgTCkswxhhjQvH/n0q7VLjgk1YAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch4.best_score_, gsearch4.best_params_))\n",
    "test_means = gsearch4.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch4.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch4.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch4.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch4.cv_results_).to_csv('my_preds_subsampleh_colsample_bytree_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(colsample_bytree), len(subsample))\n",
    "train_scores = np.array(train_means).reshape(len(colsample_bytree), len(subsample))\n",
    "\n",
    "for i, value in enumerate(colsample_bytree):\n",
    "    pyplot.plot(subsample, -test_scores[i], label= 'test_colsample_bytree:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'subsample' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'subsample_vs_colsample_bytree1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "行采样0.9，列采样在0.8附近，与每层列采样进一步调优"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 166,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'colsample_bylevel': [0.6, 0.8, 1.0], 'colsample_bytree': [0.7, 0.8, 0.9]}"
      ]
     },
     "execution_count": 166,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "colsample_bytree = [0.7,0.8,0.9]\n",
    "colsample_bylevel = [i/5.0 for i in range(3,6)]\n",
    "param_test4_2 = dict(colsample_bytree=colsample_bytree, colsample_bylevel=colsample_bylevel)\n",
    "param_test4_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 167,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.58032, std: 0.00387, params: {'colsample_bytree': 0.7, 'colsample_bylevel': 0.6},\n",
       "  mean: -0.58055, std: 0.00360, params: {'colsample_bytree': 0.8, 'colsample_bylevel': 0.6},\n",
       "  mean: -0.57999, std: 0.00348, params: {'colsample_bytree': 0.9, 'colsample_bylevel': 0.6},\n",
       "  mean: -0.57990, std: 0.00359, params: {'colsample_bytree': 0.7, 'colsample_bylevel': 0.8},\n",
       "  mean: -0.58025, std: 0.00375, params: {'colsample_bytree': 0.8, 'colsample_bylevel': 0.8},\n",
       "  mean: -0.58029, std: 0.00339, params: {'colsample_bytree': 0.9, 'colsample_bylevel': 0.8},\n",
       "  mean: -0.57993, std: 0.00385, params: {'colsample_bytree': 0.7, 'colsample_bylevel': 1.0},\n",
       "  mean: -0.58011, std: 0.00485, params: {'colsample_bytree': 0.8, 'colsample_bylevel': 1.0},\n",
       "  mean: -0.58077, std: 0.00431, params: {'colsample_bytree': 0.9, 'colsample_bylevel': 1.0}],\n",
       " {'colsample_bylevel': 0.8, 'colsample_bytree': 0.7},\n",
       " -0.5798985342665893)"
      ]
     },
     "execution_count": 167,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb4_2 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=279,  #第二轮参数调整得到的n_estimators最优值\n",
    "        max_depth=6,\n",
    "        min_child_weight=4,\n",
    "        gamma=0,\n",
    "        subsample=0.9,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=6)\n",
    "\n",
    "\n",
    "gsearch4_2 = GridSearchCV(xgb4_2, param_grid = param_test4_2, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch4_2.fit(X_train , y_train)\n",
    "\n",
    "gsearch4_2.grid_scores_, gsearch4_2.best_params_,     gsearch4_2.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 172,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.579899 using {'colsample_bytree': 0.7, 'colsample_bylevel': 0.8}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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h546dYpz585RuXJlatWqxfDhwzl69CjffPMN8+bNY86cOYC2S2n//v1cunSJgIAALl68eN95P/nkEzp27MjKlStJTEykZcuWdO7cGRsbm3yv8ejRo5w+fRpra2tatGhB9+7dGTZsGH369GH8+PFoNBp++uknjh49SnJycu5+K1aswMHBgWPHjpGRkYG/vz9du3alX79+rFu3jmeffZbMzEx2797NokWLCtw+791d0dHRDB8+nC1btnDjxg2qV/+3sIW7uzt///13gT8H165d48qVK3Ts2LHAbRTlYVIyU3h99+uExIfwadtP6VHr0buen4RKMIUorKVREnbs2MGOHTto2rQpACkpKURERNC2bVsmTpzI5MmT6dGjB23bti3S8Y4cOUK7du1yJ+dVrlwZgIMHD/LLL78A0LFjRxISEkhKSrpvX39/f4YMGULfvn1zu22ysrIYO3YsISEhmJqaEh4enrt9ixYtcHV1BaB27dp07doVAC8vr/taV3379sXExIS6detSq1Ytzp8//5/vwe+//87s2bMBSE9P5/r16wXO/+jSpQtVqlQBoE+fPhw8eJAJEyZQpUoVTp48SVxcHE2bNqVKlSr3JZgdO3YQGhrKhg0bAG3SjoiI4JlnnmHcuHFkZGSwbds22rVrR4UKFQrc3tPTM/eYbm5ubNmyBdDOW3lQYbca//TTT7z44ouYmpoWuI2iFOZu5l1G7xrNmVtn+KLdFwR6BJZ4DCrBGDEpJVOnTs236+X48eNs2bKFqVOn0rVrV95///0iHS+/D7WifPgtXryYv//+m82bN+Pj40NISAjz5s3DxcWFU6dOodFosLKyyt3e0tIy97GJiUnucxMTE7Kzsws8z4PPpZT88ssv1KtX76HXV9jxhg8fzqpVq4iNjWXo0KH/2U9Kybx58wgM/O8vYYcOHdi+fTvr1q2jf//+hW5/9erVfONyd3cnMvLf4uJRUVG4ubkVeB0//fQTCxYsKPB9RSlMUkYSI3eOJPxOOF92+JJONToZJA41yG9k7Ozscv+yDgwMZOXKlaSkpABw48YNbt68SXR0NNbW1rz66qtMnDiREydO/Gff/LRp04b9+/dz5coVgNwusnbt2vHDDz8A2ju4HB0dsbe3v2/fS5cu0apVK2bMmIGjoyORkZEkJSXh6uqKiYkJ3333HTk5OY98vevXr0ej0XDp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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch4_2.best_score_, gsearch4_2.best_params_))\n",
    "test_means = gsearch4_2.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch4_2.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch4_2.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch4_2.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch4_2.cv_results_).to_csv('my_preds_subsampleh_colsample_bytree_2.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(colsample_bylevel), len(colsample_bytree))\n",
    "train_scores = np.array(train_means).reshape(len(colsample_bylevel), len(colsample_bytree))\n",
    "\n",
    "for i, value in enumerate(colsample_bylevel):\n",
    "    pyplot.plot(colsample_bytree, -test_scores[i], label= 'test_colsample_bylevel:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'colsample_bytree' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'subsample_vs_colsample_bytree1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对每层列采样再精调一次"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 168,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'colsample_bylevel': [0.7, 0.8, 0.9]}"
      ]
     },
     "execution_count": 168,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "colsample_bylevel = [0.7,0.8,0.9]\n",
    "param_test4_3 = dict(colsample_bylevel=colsample_bylevel)\n",
    "param_test4_3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 170,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.57971, std: 0.00377, params: {'colsample_bylevel': 0.7},\n",
       "  mean: -0.57990, std: 0.00359, params: {'colsample_bylevel': 0.8},\n",
       "  mean: -0.58037, std: 0.00404, params: {'colsample_bylevel': 0.9}],\n",
       " {'colsample_bylevel': 0.7},\n",
       " -0.5797072458044881)"
      ]
     },
     "execution_count": 170,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb4_3 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=279,  #第二轮参数调整得到的n_estimators最优值\n",
    "        max_depth=6,\n",
    "        min_child_weight=4,\n",
    "        gamma=0,\n",
    "        subsample=0.9,\n",
    "        colsample_bytree=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=6)\n",
    "\n",
    "\n",
    "gsearch4_3 = GridSearchCV(xgb4_3, param_grid = param_test4_3, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch4_3.fit(X_train , y_train)\n",
    "\n",
    "gsearch4_3.grid_scores_, gsearch4_3.best_params_,     gsearch4_3.best_score_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 调整正则化参数：reg_alpha 和reg_lambda"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'reg_alpha': [0.5, 1, 1.5], 'reg_lambda': [0.5, 1, 2]}"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "reg_alpha = [0.5, 1,1.5]    #default = 0, 测试0.1,1，1.5，2\n",
    "reg_lambda = [0.5, 1, 2]      #default = 1，测试0.1， 0.5， 1，2\n",
    "\n",
    "param_test5_1 = dict(reg_alpha=reg_alpha, reg_lambda=reg_lambda)\n",
    "param_test5_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.57979, std: 0.00286, params: {'reg_lambda': 0.5, 'reg_alpha': 0.5},\n",
       "  mean: -0.58005, std: 0.00327, params: {'reg_lambda': 1, 'reg_alpha': 0.5},\n",
       "  mean: -0.58017, std: 0.00314, params: {'reg_lambda': 2, 'reg_alpha': 0.5},\n",
       "  mean: -0.57950, std: 0.00348, params: {'reg_lambda': 0.5, 'reg_alpha': 1},\n",
       "  mean: -0.57905, std: 0.00283, params: {'reg_lambda': 1, 'reg_alpha': 1},\n",
       "  mean: -0.57982, std: 0.00302, params: {'reg_lambda': 2, 'reg_alpha': 1},\n",
       "  mean: -0.57953, std: 0.00310, params: {'reg_lambda': 0.5, 'reg_alpha': 1.5},\n",
       "  mean: -0.57944, std: 0.00368, params: {'reg_lambda': 1, 'reg_alpha': 1.5},\n",
       "  mean: -0.57949, std: 0.00314, params: {'reg_lambda': 2, 'reg_alpha': 1.5}],\n",
       " {'reg_alpha': 1, 'reg_lambda': 1},\n",
       " -0.5790535932794024)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb5_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=279,  #第二轮参数调整得到的n_estimators最优值\n",
    "        max_depth=6,\n",
    "        min_child_weight=4,\n",
    "        gamma=0,\n",
    "        subsample=0.9,\n",
    "        colsample_bytree=0.7,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=6)\n",
    "\n",
    "\n",
    "gsearch5_1 = GridSearchCV(xgb5_1, param_grid = param_test5_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch5_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch5_1.grid_scores_, gsearch5_1.best_params_,     gsearch5_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([343.91895862, 344.1250071 , 344.54209142, 346.99154   ,\n",
       "        347.11421256, 344.41742468, 344.77367167, 343.86211038,\n",
       "        284.97680321]),\n",
       " 'mean_score_time': array([1.51654539, 1.47326083, 1.43655906, 1.30151978, 1.29932508,\n",
       "        1.23589478, 1.30251708, 1.36714439, 0.94168205]),\n",
       " 'mean_test_score': array([-0.57978885, -0.58005102, -0.5801741 , -0.57950375, -0.57905359,\n",
       "        -0.5798217 , -0.57953337, -0.57943508, -0.57948859]),\n",
       " 'mean_train_score': array([-0.44835035, -0.4507553 , -0.45420343, -0.44699742, -0.44994554,\n",
       "        -0.45300701, -0.44842464, -0.45052048, -0.45385468]),\n",
       " 'param_reg_alpha': masked_array(data=[0.5, 0.5, 0.5, 1, 1, 1, 1.5, 1.5, 1.5],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_reg_lambda': masked_array(data=[0.5, 1, 2, 0.5, 1, 2, 0.5, 1, 2],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'reg_alpha': 0.5, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 0.5, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 0.5, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 1, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 1, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 1, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 2}],\n",
       " 'rank_test_score': array([6, 8, 9, 4, 1, 7, 5, 2, 3]),\n",
       " 'split0_test_score': array([-0.57487476, -0.57442646, -0.57476175, -0.57357384, -0.5742907 ,\n",
       "        -0.57497546, -0.57408393, -0.57338286, -0.57390829]),\n",
       " 'split0_train_score': array([-0.45207572, -0.45383328, -0.4566298 , -0.44841417, -0.45304383,\n",
       "        -0.45478124, -0.45009769, -0.45239758, -0.45598039]),\n",
       " 'split1_test_score': array([-0.57878765, -0.57944472, -0.57922275, -0.5780167 , -0.57778895,\n",
       "        -0.57856684, -0.57875765, -0.57805091, -0.57906825]),\n",
       " 'split1_train_score': array([-0.44725788, -0.4497671 , -0.45346682, -0.4457497 , -0.44972129,\n",
       "        -0.45189587, -0.44814725, -0.44946444, -0.45296323]),\n",
       " 'split2_test_score': array([-0.58030804, -0.5798551 , -0.58047971, -0.58028192, -0.57992637,\n",
       "        -0.57979793, -0.57986153, -0.57953312, -0.57955258]),\n",
       " 'split2_train_score': array([-0.44812039, -0.45023022, -0.45370888, -0.44689942, -0.44869066,\n",
       "        -0.4521801 , -0.44734188, -0.44983032, -0.45329502]),\n",
       " 'split3_test_score': array([-0.58184193, -0.58267214, -0.58265009, -0.58228428, -0.58072727,\n",
       "        -0.58193178, -0.58221418, -0.5820946 , -0.58204938]),\n",
       " 'split3_train_score': array([-0.44833581, -0.45061412, -0.45518458, -0.44808942, -0.45015704,\n",
       "        -0.45450469, -0.44992724, -0.45110485, -0.45443006]),\n",
       " 'split4_test_score': array([-0.5831329 , -0.58385782, -0.58375731, -0.5833632 , -0.58253573,\n",
       "        -0.58383772, -0.58275051, -0.58411533, -0.58286547]),\n",
       " 'split4_train_score': array([-0.44596193, -0.44933181, -0.45202706, -0.44583437, -0.44811489,\n",
       "        -0.45167314, -0.44660912, -0.44980522, -0.45260472]),\n",
       " 'std_fit_time': array([2.53357266, 1.74979424, 0.58694636, 1.2630042 , 1.32502211,\n",
       "        0.47340177, 0.60751649, 0.43655245, 0.87333956]),\n",
       " 'std_score_time': array([0.39726216, 0.390005  , 0.22426973, 0.28581767, 0.15420368,\n",
       "        0.11655775, 0.23927936, 0.11925772, 0.02913468]),\n",
       " 'std_test_score': array([0.00285717, 0.0032681 , 0.00313882, 0.00348157, 0.00282742,\n",
       "        0.00302126, 0.00309652, 0.00367505, 0.00313946]),\n",
       " 'std_train_score': array([0.00204105, 0.00159828, 0.00157313, 0.00110623, 0.00171   ,\n",
       "        0.00134822, 0.00138581, 0.00109253, 0.00122638])}"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch5_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.579054 using {'reg_lambda': 1, 'reg_alpha': 1}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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BVPdRUbBRf/nFj2cdptbYmb4q9D+vFBHZgodU7U8Bj2rXnPY/81czZptFbu3UZcWdfnL5aeXet66deuYOnUqEydO5Ne//jVffvkltWrV4tFHH+XJJ5/k3nvv5eabb2bu3Lm0a9eOkSNHnvB6nTt3Zu7cuURFRfHll1/ywAMP8MEHHxxz3sqVK1m0aBGHDx+me/fuXHrppQAsX76c1atX06JFC/r168eCBQs455xzuOOOO3jooYcAGDVqFB9//DGXX345L730EgC33HILW7dupXXrI3v5tGrViq1bt9K8efNjnn/s2LFERkZy5ZVX8uc//7nCB1xYgjFOl6HQuDO8e71baffCCdD3TlurKtQObHMz8Td8AW36whXP22TZAGjbti29e/fm448/Zs2aNfTr1w+AnJwc+vTpw08//UT79u2L5oOMHDmSSZMmHfd66enp3HDDDWzYsAERITc31+d5w4YNIy4ujri4OAYMGMDixYupV68evXr1olWrVgAkJiayadMmzjnnHObMmcNjjz1GRkYG+/bt4/TTT+fyyy/nlltuKbqmr6rGV+J46623aNmyJQcPHuTKK6/kzTffZPTo0f7/0vxgCcYc0bgTjPvKNcHMfsj1ywx7AWLrhjqy6kfVDb747H7Iz4FBj7rVsqtY1VKcP5VGoNSqVQtwf5wvuugi3n777aPuX758+Uld78EHH2TAgAF89NFHbNq0ifPPP9/neSX/8Bfejok50hcaGRlJXl4eWVlZ3HbbbSxdupTWrVszYcIEn3NUWrVqRWpqatHttLQ0WrRoccx5LVu2BKBOnTpce+21LF68uMITTNX932rKJqY2XPUaXPx3+OlTmHIB7D62/dgE0IFt8J9rYPptbp+fWxdA71uqdHIJF71792bBggUkJycDkJGRwfr16+ncuTMpKSls2rQJgHffffeE10lPTy/6A/7aa68d97zp06eTlZXF3r17+frrr+nZs+dxzy1MJo0aNeLQoUO8//77Ps8bOnQob7zxBqrKokWLiI+PP6Z5LC8vjz179gBuuZ6PP/6Yrl27nvA1lYX9jzXHEoG+d7jdMjN/sd0yg6WwanmhN2yc60b1jfkEGp4S6siqjcaNG/Paa68xcuRIunXrRu/evfnpp5+Ii4vjhRdeYNCgQZxzzjk0bdqU+Pj4417n3nvv5f7776dfv37k5x9/1YxevXpx6aWX0rt3bx588EGflUahevXqMW7cOM444wyuuOKKo5LRSy+9VNQPM2TIENq3b0+HDh0YN24cL7zwQtF5iYmJAGRnZ3PJJZfQrVs3EhMTadmyJePGjfP79+Qv8dVeV10kJSXp0qVLQx1GeDuwDd67AdIWQ9/fwgUT3MAAU7EObPf6Wj6HNn3chNhqkFjWrl3LaaedFuow/HLo0CFq166NqnL77bfTsWNH7r777jJfb8KECdSuXZv/9//+XwVGWfF8/RuJyDJVLXV8s1Uw5sQKd8vsOQ6+/ZcbAGC7ZVYcVVjxNrxwtqtaLnkYxnxaLZJLZTN58mQSExM5/fTTSU9P5+abbw51SGHPKhirYPz3wzsw8y63FcDVb0Dr47cXGz8c2O52mFz/GbTuDVe8UO0SS2WqYHyZOnUqzzzzzFHH+vXrx/PPPx+iiCpe2FYwIjJIRNaJSLKI/NHH/WNEZLeIrPC+bvKODyh2bIWIZInIFd59A0XkexFZJSKvi0iUd/w6EVnpfX0rImcG8rVVS2eO8HbLrAFTB9tumWWl6pL1C2dDytdwyT9grFUtldHYsWNZsWLFUV9VKbmUV8ASjIhEAs8Dg4EuwEgR6eLj1HdVNdH7mgKgqnMKjwEDgQzgCxGJAF4HRqhqV2AzcIN3nY3AearaDfgrcPxB6qbsCnfLPGWg2y1z2q22W+bJOLgD3h4JH90MjU9za4j1uR0iIkMdmTEVLpAVTC8gWVVTVDUHeAcYVobrDAdmqWoG0BDIVtX13n2zgSsBVPVbVf3FO74IaFWu6M3xxdWHke/A+Q+4T+KvXAz7NoY6qvCmCj+8C8+fDSlz3DBwq1pMFRfIBNMSSC12O807VtKVXrPW+yLS2sf9I4DCWU97gGgRKWz7Gw74esyNwKyyhW38EhEB598H1/0X0lPd0v/rvwh1VOHp4A5451r4aDw0PhVume+GgVvVYqq4QCYYX2uMlGywnwkkeM1aX+Kav45cQKQ5cAbwOYC6EQkjgKdEZDFwEMgr8ZgBuARzn8+gRMaLyFIRWbp79+6TflGmhI4XuSazem283TIfhoKCUEcVHlRh5Xuuavn5K69qmQWNOoY6MmOCIpAJJo2jq4tWwLbiJ6jqXlXN9m5OBs4qcY2rgY9UNbfYYxaq6rmq2guYC2wovE9EugFTgGGqutdXUKo6SVWTVDWpcePGZXxp5igN2sGNs+HMkfDNI/D2NbZb5sGd8M518OE4aNTJqhYDBGc/mJ9++ok+ffoQExPDE088UebrVIRAJpglQEcRaSciNXCVx4ziJ3gVSqGhwNoS1xjJkeaxwsc08b7H4KqUl7zbbYAPgVHF+mhMsETHuWG2lz4JP8+BSefD9pWhjir4iqqWXvDz/+Div7nN3axqqRRUlYJKXoE3aNCAZ599NiwmcAYswahqHnAHrnlrLfCeqq4WkYkiMtQ77U4RWS0iPwB3AmMKHy8iCbgK6JsSl75HRNYCK4GZqvqVd/wh3CCAF7yhzTbBJdhEoOeN7g9qfi68cpGbRFhdHNzpVqP+cJxLKLfMd6sfWNUS1qrafjBNmjShZ8+eREdHl/dXU24BXfNDVT8FPi1x7KFiP98P3H+cx27Cx6AAVb0HuMfH8ZuAm8oXsakQrZLg5rnw/liYdou3W+bDVXe3TFVY9YEbtp2TARf91YYel8WsP8KOHyv2ms3OgMGPlHpaVdoPJpzYolImMGo3hlHT4KuJsOAZ2P6Dm/0f72sgYSV2aBd8fDf89DG06um2N2jcKdRRmZNUlfaDCSeWYEzgREbBRROP3i3zqqnQrn+oIyu/Y6qWidDHOvHLxY9KI1Cq0n4w4cQWuzSB12UYjJsDNRvAG8NcRVOZl5g5tAveGwUf3AgNToFb5kG/31lyqQKqwn4w4cQqGBMcx+yWudSNOoupE+rI/FdUtdwDOYfhwv+zTvwqpvh+MNnZbgbF3/72Nzp16lS0H0yjRo3o1avXCa9z7733csMNN/Dkk08ycODA455XuB/Mli1bivaDWb/e9yDY4vvBJCQkHLMfDLg+mB07dpCUlMSBAweIiIjg6aefZs2aNdStG/ydaW01ZVtNObhU3bL/X/4FGnaAa/7tZreHu0O74ZO7Ye1M1+R3xYuVI+4wV5lWU7b9YI4Ii9WUjTmGCPS7E0ZPd5MxJw+E1dNCHdXxFVYtz/eC9Z/DhRPgN19YcqmGbD+Yk2cVjFUwoZO+Ff57gxvG3PdOuOAv4bVb5qHd8MnvYe0MV7UMewGadA51VFVKZapgfLH9YE4sjN7NptqJb+l2y/z8Afj2Wdi2HIZPdUOcQ23Vh26EWPZBl/j63hleyc+EhbFjxzJ27NhQhxG2rInMhFZUDFz6T7jiJVfJvNwfUpeELp5Du+G90W6SaL22bsLoub+35GJMGViCMeEhcaRbMDMy2u2WuWRK8Icyr/7I7TK5bparWm6cDU0qb/ONMaFmCcaEj+bd4OZv4JQB8Mkf3OTM3MzAP+/hPfDeDfDfMW7bAatajKkQlmBMeImrDyPfhfPvhx/edgtmBnK3zNXT3H4t6z6FCx6CG7+0qsWYCmIJxoSfiAg4/49w7Xuwf4tb+n/D7Ip9jsN7XMXy3xsgvhWM/wbO/YNVLSagwmk/mDFjxtCuXTsSExNJTExkxYoVZX7O47F3kwlfnS52f/jfGwVvXeWSTv97XQIqjzXT4ePfQ1Y6DHwQ+t1licUAbi0yVSWivP/HQqhwP5hp00qfX/b4448zfPjwgMVi7yoT3hq0cxMbP/k9fP0wbF0Gv57kmtJO1uG98OkfXGd+80S4YSY07VLxMZsyeXTxo/y076cKvWbnBp25r5fP3dOLbNq0icGDBzNgwAAWLlzIXXfdxUsvvUR2djannHIKU6dOpXbt2nz66af8/ve/p1GjRvTo0YOUlBQ+/vhjn9dcvHgxd911F5mZmcTFxTF16lROPfXoybkTJkzg559/ZuvWraSmpnLvvfcybtw44Mh+MKtWreKss87i3//+NyLCxIkTmTlzJpmZmfTt25eXX375mAUzmzRpQpMmTfjkk0/K8ZurGJU3TZvqo0ZNtzTLpf8s+26Za6a72fhrP4aBf4abvrTkYoqsW7eO0aNHM3v2bF555RW+/PJLvv/+e5KSknjyySfJysri5ptvZtasWcyfP5/du3ef8HqF+8EsX76ciRMn8sADD/g8b+XKlXzyyScsXLiQiRMnsm2b21V++fLlRWuIpaSksGDBAgDuuOMOlixZwqpVq8jMzCxKcC+99FLRemQn409/+hPdunXj7rvvLlp7rSJZBWMqBxHoeRM0O9PNU3nlIrj8GThzxIkfd3gvzLrHLffS/Ey4YQY0PT04MZuTUlqlEUjVcT+Yhx9+mGbNmpGTk8P48eN59NFHizYzqyhWwZjKpXVPN4y4VU/46GY3nDkvx/e5a2a4eS1rZsCAP8NN/7PkYnwquR/MihUrWLFiBWvWrOGVV17xuTXxiRTuB7Nq1Spmzpx53H1byrIfzPvvv8+PP/7IuHHjyrUfTPPmzRERYmJiGDt2LIsXLy7ztY7HEoypfAp3y+x7p5uQ+doQOLDtyP0Z++D937jBAXWaw/iv4bx73CROY06gOu0Hs337dsAl1WnTptG1a9dyXc8XayIzlVNkFFz8V7cI5fTb3RIzw6dC1n63hXHmfhjwJzjnbkssxm9VfT+YIUOGMGXKFFq0aMF1113H7t27UVUSExPL1IdTGltN2VZTrvx2r4N3r4c9GwCFZt3coIBmFf+JzFSsyrSasu0Hc4Stpmyqj8anut0yZz8EdVu67YutajEVbPLkybz++uvk5OTQvXt32w/GD1bBWAVjTMhUpgrGF9sP5sSsgjHGmDKy/WBOzEaRGWNCqjq3ooS78v7bWIIxxoRMbGwse/futSQThlSVvXv3EhsbW+ZrWBOZMSZkWrVqRVpaWqlLr5jQiI2NLVpRoCwCmmBEZBDwDBAJTFHVR0rcPwZ4HNjqHXpOVaeIyADgqWKndgZGqOo0ERkIPAHUAJYBN6pqnrgpsM8AQ4AMYIyqfh+4V2eMKa/o6Oii5VdM1ROwJjIRiQSeBwYDXYCRIuJrdcF3VTXR+5oCoKpzCo8BA3EJ4wsRiQBexyWbrsBm4AbvOoOBjt7XeODFQL02Y4wxpQtkH0wvIFlVU1Q1B3gHGFaG6wwHZqlqBtAQyFbVwqmus4ErvZ+HAW+oswioJyLNy/cSjDHGlFUgE0xLILXY7TTvWElXishKEXlfRFr7uH8E8Lb38x4gWkQKx18PBwof49fzich4EVkqIkut3dcYYwInkH0w4uNYyaEiM4G3VTVbRG7BNX8VLdzjVSBnAJ8DqKqKyAjgKRGJAb4A8k7i+VDVScAk7/q7RWTzSb2qwGqES6LhKtzjg/CPMdzjA4uxIoR7fFC+GNv6c1IgE0waR6oLgFbAtuInqOreYjcnA4+WuMbVwEeqmlvsMQuBcwFE5GKgk7/PV5KqNi71VQSRiCz1Z3ZsqIR7fBD+MYZ7fGAxVoRwjw+CE2Mgm8iWAB1FpJ2I1MA1dc0ofkKJPpKhwNoS1xjJkeaxwsc08b7HAPcBhUuAzgBGi9MbSFfV7RX1YowxxpycgFUw3tDhO3DNW5HAq6q6WkQmAktVdQZwp4gMxTVz7QPGFD5eRBJwFck3JS59j4hchkuOL6rqV97xT3FDlJNxo85s/QZjjAmhar3YZbgRkfFeH1FYCvf4IPxjDPf4wGKsCOEeHwQnRkswxhhjAsLWIjPGGBMQlmCCTEQGicg6EUkWkT8e55yrRWSNiKwWkf+EW4wi0kZE5ojIcm8O05Agx/eqiOwSkVXHuV9E5Fkv/pUi0iOY8fkZ43VebCtF5FsROTOc4it2Xk8RyReR4cGKrdhzlxqjiJwvIiu890rJ/tqQxici8SIyU0R+8OILer+wiLT23qtrvRh+5+OcwL1fVNW+gvSFG+zwM9Aet5baD0CXEud0BJYD9b3bTcIwxknArd7PXYBNQY6xP9ADWHWc+4cAs3Bzo3oD34Xg37q0GPsW+zceHOwYS4uv2P+Fr3ADaIaH4e+wHrAGaOPdDvZ7pbT4HgAe9X5ujBvIVCPIMTYHeng/1wHW+3g/B+z9YhVMcPmzfM444HlV/QVAVXeFYYwK1PV+jqeU+UYVTVXn4t6sxxPyZYNKi1FVvy38NwYW4eZtBY0fv0OA3wIfAMH+Pwj4FeO1wIequsU7P6hx+hGfAnW8hXhre+fmneD8Cqeq29Vb9FdVD+KmgpRc4SRg7xdLMMHlz3I2nYBOIrJARBaJW5E6mPyJcQJwvYik4T7d/jY4ofnN32WKwsWNuE+QYUNEWgK/4sg8s3DUCagvIl+LyDIRGR3qgEp4DjgN9wHsR+B3qloQqmC8qR/dge9K3BWw94vtBxNc/ixnE4VrJjsf96l2noh0VdX9AY6tkD8xjgReU9V/ikgf4E0vxpC9eUrwa9mgcCBua4obgXNCHUsJTwP3qWq++wAelqKAs4ALgDhgoYgs0iOL4YbaJcAK3PJXpwCzRWSeqh4IdiAiUhtXjd7l4/kD9n6xBBNc/ixnkwYsUrc8zkYRWYdLOEuCE6JfMd4IDAK3dI+IxOLWNQpJU4oPJ71sUCiISDdgCjBYj142KRwkAe94yaURMERE8lR1WmjDOkoasEdVDwOHRWQucCaunyEcjAUeUdfRkSwiG3F7Wy0OZhAiEo1LLm+p6oc+TgnY+8WayIKr1OVzgGnAAAARaYRrBkgJsxi34D41IiKnAbFAOC1NHfbLBolIG+BDYFQYfeIuoqrtVDVBVROA94Hbwiy5AEwHzhWRKBGpCZzNsctNhVLx90lT4FSC+17G6/95BVirqk8e57SAvV+sggki9W/5nM+Bi0VkDZAP3BPMT7d+xvgHYLKI3I0rpcd4n9KCQkTexjUhNvL6gf4CRHvxv0QYLBvkR4wP4fY3esGrEvI0iIsj+hFfyJUWo6quFZHPgJVAAW7X3BMOuw5mfMBfgddE5EdcM9R9qhrsFZb7AaOAH0VkhXfsAaBNsTgD9n6xmfzGGGMCwprIjDHGBIQlGGOMMQFhCcYYY0xAWIIxxhgTEJZgjDHGBIQlGGOMMQFhCcaYSsBblv7j8p5jTDBZgjGmAnizoO39ZEwx9oYwpoxEJMHbyOkF4HtglIgsFJHvReS/3gKDiMgQEflJROZ7Gzsdt8oQkV7iNiBb7n0/1cc5E0TkTRH5SkQ2iMi4YnfXFpH3ved7y1sqBBF5SESWiMgqEZlUeNyYQLIEY0z5nAq8AVyEWwT0QlXtASwFfu8tBPoybkHLc3AbT53IT0B/Ve2OW07mH8c5rxtwKdAHeEhEWnjHuwN34TaCa49bKgTgOVXtqapdcSsPX3bSr9SYk2RrkRlTPptVdZGIXIb7o77AKw5qAAtxq+emqOpG7/y3gfEnuF488LqIdMSt8xZ9nAz3txkAAAFmSURBVPOmq2omkCkic3Abxe0HFqtqGoC39lQCMB8YICL3AjWBBsBqYGbZXrIx/rEEY0z5HPa+CzBbVUcWv1NEup/k9f4KzFHVX3kbRH19nPNKLiJYeDu72LF8IMqrol4AklQ1VUQm4FbANiagrInMmIqxCOgnIh0ARKSmiHTCNXm195IFwDWlXCce2Or9POYE5w0TkVgRaYhb0fdE+wUVJpM9Xr/Q8FJiMKZCWIIxpgKo6m5cQnhbRFbiEk5nrxnrNuAzEZkP7ATST3Cpx4CHRWQBbruE41kMfOI9z19V9bgbRHm7oU7Gbds7jeBtXmeqOVuu35gAE5HaqnrIG7n1PLBBVZ8qx/UmAIdU9YmKitGYQLAKxpjAG+d1uK/GNYG9HOJ4jAkKq2CMCQERGQv8rsThBap6eyjiMSYQLMEYY4wJCGsiM8YYExCWYIwxxgSEJRhjjDEBYQnGGGNMQFiCMcYYExD/H6dA6oi8qddpAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch5_1.best_score_, gsearch5_1.best_params_))\n",
    "test_means = gsearch5_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch5_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch5_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch5_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch5_1.cv_results_).to_csv('my_preds_reg_alpha_reg_lambda_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "train_scores = np.array(train_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "\n",
    "#log_reg_alpha = [0,0,0,0]\n",
    "#for index in range(len(reg_alpha)):\n",
    "#   log_reg_alpha[index] = math.log10(reg_alpha[index])\n",
    "    \n",
    "for i, value in enumerate(reg_alpha):\n",
    "    pyplot.plot(reg_lambda, -test_scores[i], label= 'reg_alpha:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'reg_alpha' )                                                                                                      \n",
    "pyplot.ylabel( '-Log Loss' )\n",
    "pyplot.savefig( 'reg_alpha_vs_reg_lambda1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 建立模型，将在划分出来的测试集上测试"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "xgb_final = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=279,  #第二轮参数调整得到的n_estimators最优值\n",
    "        max_depth=6,\n",
    "        min_child_weight=4,\n",
    "        gamma=0,\n",
    "        subsample=0.9,\n",
    "        colsample_bytree=0.7,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        reg_alpha =  1,\n",
    "        reg_lambda =  1,\n",
    "        seed=6)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\model_selection\\_split.py:2026: FutureWarning: From version 0.21, test_size will always complement train_size unless both are specified.\n",
      "  FutureWarning)\n"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "X_train_part, X_val, y_train_part, y_val = train_test_split(X_train, y_train, train_size = 0.8,random_state = 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=0.7,\n",
       "       colsample_bytree=0.7, gamma=0, learning_rate=0.1, max_delta_step=0,\n",
       "       max_depth=6, min_child_weight=4, missing=None, n_estimators=279,\n",
       "       n_jobs=1, nthread=None, objective='multi:softprob', random_state=0,\n",
       "       reg_alpha=1, reg_lambda=1, scale_pos_weight=1, seed=6, silent=True,\n",
       "       subsample=0.9)"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb_final.fit(X_train_part , y_train_part)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy on test: 0.741769 and on train: 0.824169\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n"
     ]
    }
   ],
   "source": [
    "accuracy_train = xgb_final.score(X_train_part, y_train_part)\n",
    "accuracy = xgb_final.score(X_val, y_val)\n",
    "print(\"accuracy on test: %f and on train: %f\"%(accuracy, accuracy_train) )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'y_predxgb_final' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-18-79645e8eb365>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[0mxgb_final\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mX_train\u001b[0m \u001b[1;33m,\u001b[0m \u001b[0my_train\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0my_predxgb_final\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdtest\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m: name 'y_predxgb_final' is not defined"
     ]
    }
   ],
   "source": [
    "xgb_final.fit(X_train , y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\dev\\ai\\anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n"
     ]
    }
   ],
   "source": [
    "X_test = np.array(dtest)\n",
    "y_pred=xgb_final.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_pred.reshape(-1,1)\n",
    "test = pd.DataFrame(y_pred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74629</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74630</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74631</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74632</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74633</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74634</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74635</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74636</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74637</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74638</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74639</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74640</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74641</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74642</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74643</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74644</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74645</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74646</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74647</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74648</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74649</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74650</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74651</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74652</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74653</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74654</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74655</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74656</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74657</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74658</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>74659 rows × 1 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       0\n",
       "0      2\n",
       "1      1\n",
       "2      2\n",
       "3      2\n",
       "4      2\n",
       "5      2\n",
       "6      2\n",
       "7      1\n",
       "8      2\n",
       "9      2\n",
       "10     2\n",
       "11     2\n",
       "12     2\n",
       "13     2\n",
       "14     2\n",
       "15     2\n",
       "16     2\n",
       "17     2\n",
       "18     2\n",
       "19     2\n",
       "20     2\n",
       "21     2\n",
       "22     2\n",
       "23     1\n",
       "24     2\n",
       "25     1\n",
       "26     2\n",
       "27     1\n",
       "28     2\n",
       "29     2\n",
       "...   ..\n",
       "74629  1\n",
       "74630  1\n",
       "74631  2\n",
       "74632  2\n",
       "74633  2\n",
       "74634  2\n",
       "74635  2\n",
       "74636  2\n",
       "74637  2\n",
       "74638  2\n",
       "74639  2\n",
       "74640  2\n",
       "74641  2\n",
       "74642  2\n",
       "74643  2\n",
       "74644  2\n",
       "74645  1\n",
       "74646  2\n",
       "74647  2\n",
       "74648  1\n",
       "74649  1\n",
       "74650  1\n",
       "74651  2\n",
       "74652  2\n",
       "74653  2\n",
       "74654  2\n",
       "74655  2\n",
       "74656  2\n",
       "74657  0\n",
       "74658  2\n",
       "\n",
       "[74659 rows x 1 columns]"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "test.to_csv('RentListingInquries_pred.csv', index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
